Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1741937
  • 博文数量: 297
  • 博客积分: 285
  • 博客等级: 二等列兵
  • 技术积分: 3006
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-06 22:04
个人简介

Linuxer, ex IBMer. GNU https://hmchzb19.github.io/

文章分类

全部博文(297)

文章存档

2020年(11)

2019年(15)

2018年(43)

2017年(79)

2016年(79)

2015年(58)

2014年(1)

2013年(8)

2012年(3)

分类: LINUX

2016-08-19 16:05:50

碰到很奇怪的事情,在某一个linux上openssl s_client connect 127.0.0.1 居然会报错。

点击(此处)折叠或打开

  1. openssl s_client -connect 127.0.0.1:80 -ssl3
  2. unknown option -ssl3
从来没见过这个错,后来发现这个openssl 居然是 fips的

点击(此处)折叠或打开

  1. openssl version -a
  2. OpenSSL 1.0.1e-fips 11 Feb 2013
这个openssl 很诡异,我实在是没辙,使用strace 也没有看出点啥,想想也是,ssl的库调用不属于系统调用。
我后来仔细的看了ciphers,从这里我猜测到了一些,这个FIPS的openssl 编译的时候应该就去掉了sslv3的支持。(no-ssl3)

点击(此处)折叠或打开

  1. openssl ciphers -v
  2. DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5
  3. RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5
  4. RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
  5. DES-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=DES(56) Mac=MD5
  6. EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
  7. EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
注意没有一个是sslv3的。来看我另外一个rhel 7 上的openssl ciphers -v 的输出。
对比一下就很清楚了,FIPS的openssl 只有6个ciphers suites. 而我的rhel 7上的openssl ciphers suites 则有70多。

点击(此处)折叠或打开

  1. penssl version -a
  2. OpenSSL 1.0.1e-fips 11 Feb 2013
  3. openssl ciphers -v
  4. ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
  5. ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
  6. ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
  7. ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
  8. ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
  9. ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
  10. DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD
  11. DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
  12. DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
  13. DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256
  14. DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
  15. DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
  16. DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1
  17. DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(256) Mac=SHA1
  18. ECDH-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
  19. ECDH-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
  20. ECDH-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA384
  21. ECDH-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA384
  22. ECDH-RSA-AES256-SHA SSLv3 Kx=ECDH/RSA Au=ECDH Enc=AES(256) Mac=SHA1
  23. ECDH-ECDSA-AES256-SHA SSLv3 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA1
  24. AES256-GCM-SHA384 TLSv1.2 Kx=RSA Au=RSA Enc=AESGCM(256) Mac=AEAD
  25. AES256-SHA256 TLSv1.2 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA256
  26. AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
  27. CAMELLIA256-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(256) Mac=SHA1
  28. PSK-AES256-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA1
  29. .......省略50行的输出.......................................
根据stackoverflow上的信息:FIPS是需要enabled的。
在shared object 里面能看到symbol.

点击(此处)折叠或打开

  1. ~ #nm /usr/lib64/libssl.so.1.0.0 |grep -i fips
  2.                  U FIPS_mode
  3. 000000000002f860 T tls_fips_digest_extra

  4. ~ #nm /usr/lib64/libcrypto.so |grep -i fips_*
  5. 0000000000080cd0 T ERR_load_FIPS_strings
  6. 00000000001bc970 T FIPS_add_error_data
  7. 00000000001bdda0 T FIPS_add_lock
  8. 0000000000179fa0 T FIPS_bn_bin2bn
  9. 0000000000179680 T FIPS_bn_bn2bin
  10. ...........省略n行输出.............
  11. ~ # nm /usr/lib64/libcrypto.so | grep -i fips_text_*
  12. 00000000001beb00 T FIPS_text_end
  13. 0000000000170a80 T FIPS_text_start
  14. ~ # nm /usr/lib64/libcrypto.so | grep -i fips_rodata*
  15. 00000000001efbe0 R FIPS_rodata_end
  16. 00000000001e48e0 R FIPS_rodata_start
  17. ~ # nm /usr/lib64/libcrypto.so | grep -i fips_signature*
  18. 000000000044d6e0 B FIPS_signature
  19. ~ # nm /usr/lib64/libcrypto.so | grep -i fips_incore*
  20. 0000000000170c60 T FIPS_incore_fingerprint
但是到最后我还是留下了2个疑问:

1. 我可以md5命令而不报错,不知道为啥

点击(此处)折叠或打开

  1. env OPENSSL_FIPS=1 openssl md5 <some file>

2.另外一个就是我在rhel 上用nm 来查看查看符号,一个都看不到。

点击(此处)折叠或打开

  1. ldd /usr/bin/openssl
  2.     linux-vdso.so.1 => (0x00007ffc4f9f7000)
  3.     libssl.so.10 => /lib64/libssl.so.10 (0x00007feccddcb000)
  4.     libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007feccdb7f000)
  5.     libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007feccd899000)
  6.     libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007feccd695000)
  7.     libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007feccd463000)
  8.     libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007feccd07a000)
  9.     libdl.so.2 => /lib64/libdl.so.2 (0x00007feccce76000)
  10.     libz.so.1 => /lib64/libz.so.1 (0x00007fecccc60000)
  11.     libc.so.6 => /lib64/libc.so.6 (0x00007feccc89e000)
  12.     libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007feccc68f000)
  13.     libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007feccc48b000)
  14.     libresolv.so.2 => /lib64/libresolv.so.2 (0x00007feccc270000)
  15.     libpthread.so.0 => /lib64/libpthread.so.0 (0x00007feccc054000)
  16.     /lib64/ld-linux-x86-64.so.2 (0x00007fecce061000)
  17.     libselinux.so.1 => /lib64/libselinux.so.1 (0x00007feccbe2e000)
  18.     libpcre.so.1 => /lib64/libpcre.so.1 (0x00007feccbbcd000)
  19.     liblzma.so.5 => /lib64/liblzma.so.5 (0x00007feccb9a8000)

  20. nm /lib64/libssl.so.10
  21. nm: /lib64/libssl.so.10: no symbols

  22. strings /lib64/libssl.so.10 |grep ssl
  23. ssl2_new
  24. ssl2_clear
  25. ssl2_free
  26. ssl2_accept
  27. ssl2_connect
  28. ssl2_read
  29. ssl2_peek
  30. ssl2_write
  31. ssl2_shutdown
  32. ssl_ok
  33. ssl2_ctrl
  34. ssl2_ctx_ctrl
  35. ssl2_get_cipher_by_char
  36. ssl2_put_cipher_by_char
  37. ssl2_pending
  38. ssl2_num_ciphers
  39. ssl2_get_cipher
  40. ssl2_default_timeout
  41. ssl3_undef_enc_method

后记:
到底什么是 FIPS的openssl 呢?
官方的说法在这里:


阅读(3774) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~