FIPS模式导致Ruby on Rails应用程序因MD5摘要/openssl问题而失败



我们开发了一个web应用程序,使用RubyonRails作为我们在nginx上运行的前端。最近,由于一些安全审计,我们的服务器被修补以符合FIPS 140-2,这是加密模块的政府标准。他们安装了dracut-fips,修改了grub.boot以添加fips=1,并修改了sshd_config以只允许fips兼容的算法,基本上不允许MD5。

在这个补丁完成后,我注意到nginx给了我们一个非常常见的错误,我们无法访问我们的web应用程序。我在nginx错误日志中注意到:

App 19865 stderr: md5_dgst.c(78): OpenSSL internal error, assertion failed: Digest MD5 forbidden in FIPS mode!
2016/04/06 13:48:13 [error] 19193#0: *24 upstream prematurely closed connection while reading response header from upstream, client: XXX.XX.XX.X, server: localhost, request: "GET /XXX/YYY/ZZZ HTTP/1.1", upstream: "passenger:/tmp/passenger.1.0.19172/generation-0/request:", host: "XX.XX.XX.XX:8080"
[ 2016-04-06 13:48:15.0082 19176/7f2908497700 Pool2/Pool.h:777 ]: Process (pid=20439, group=/opt/www/ASDFASDF#default) no longer exists! Detaching it from the pool.

在我们的任何应用程序日志中都没有太多其他内容。我确实注意到/var/log/messages:

Apr  6 13:43:49 HOSTNAME abrt[20213]: Saved core dump of pid 20062 (/usr/local/rvm/rubies/ruby-2.1.0/bin/ruby) to /var/spool/abrt/ccpp-2016-04-06-13:43:48-20062 (159068160 bytes)
Apr  6 13:43:49 HOSTNAME abrtd: Directory 'ccpp-2016-04-06-13:43:48-20062' creation detected
Apr  6 13:43:49 HOSTNAME abrtd: Executable '/usr/local/rvm/rubies/ruby-2.1.0/bin/ruby' doesn't belong to any package and ProcessUnpackaged is set to 'no'
Apr  6 13:43:49 HOSTNAME abrtd: 'post-create' on '/var/spool/abrt/ccpp-2016-04-06-13:43:48-20062' exited with 1
Apr  6 13:43:49 HOSTNAME abrtd: Deleting problem directory '/var/spool/abrt/ccpp-2016-04-06-13:43:48-20062'

我们使用的是:

  • RHEL 6.5
  • Ruby 2.1.0p0(2013-12-25修订版44422)[x86_64-linux]
  • 轨道4.0.3
  • nginx版本:nginx/1.4.4
  • RVM

我在我们的代码库中搜索了"Digest::MD5",但在任何地方都找不到。我想知道是Gem导致了这种情况,还是仅仅是一个我们可以设置为不使用MD5的标志?

问题可能在Rails中。Rails在一些地方使用了Digest::MD5,并且不符合FIPS 140-2标准。

根据这个错误zilla,它将在Ruby>=2.2 版本中工作

最新更新