![apache + ssl 的问题:长度不匹配错误和偶尔的错误请求](https://linux22.com/image/523409/apache%20%2B%20ssl%20%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%9A%E9%95%BF%E5%BA%A6%E4%B8%8D%E5%8C%B9%E9%85%8D%E9%94%99%E8%AF%AF%E5%92%8C%E5%81%B6%E5%B0%94%E7%9A%84%E9%94%99%E8%AF%AF%E8%AF%B7%E6%B1%82.png)
我们最近将一台服务器从 Slicehost 迁移到 linode,我们将配置从一台服务器复制到另一台服务器。一切都运行正常,除了我们得到以下信息:
偶尔会出现“Bad Request”的错误,这个错误并不常见,你可能使用一整天都看不到它,而第二天就会经常发生。
除此之外,很多时候,尽管请求运行正常,我们也会出现一些错误。
使用 ssldump 我们得到:
New TCP connection #1: myip(39831) <-> develserk(443)
1 1 0.2316 (0.2316) C>S SSLv2 compatible client hello
Version 3.1
cipher suites
Unknown value 0x39
Unknown value 0x38
Unknown value 0x35
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
SSL2_CK_3DES
Unknown value 0x33
Unknown value 0x32
Unknown value 0x2f
SSL2_CK_RC2
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_RC4_128_MD5
SSL2_CK_RC4
TLS_DHE_RSA_WITH_DES_CBC_SHA
TLS_DHE_DSS_WITH_DES_CBC_SHA
TLS_RSA_WITH_DES_CBC_SHA
SSL2_CK_DES
TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA
TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA
TLS_RSA_EXPORT_WITH_DES40_CBC_SHA
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5
SSL2_CK_RC2_EXPORT40
TLS_RSA_EXPORT_WITH_RC4_40_MD5
SSL2_CK_RC4_EXPORT40
1 2 0.2429 (0.0112) S>C Handshake
ServerHello
Version 3.1
session_id[32]=
9a 1e ae c4 5f df 99 47 97 40 42 71 97 eb b9 14
96 2d 11 ac c0 00 15 67 4e f3 7d 65 4e c4 30 e9
cipherSuite Unknown value 0x39
compressionMethod NULL
1 3 0.2429 (0.0000) S>C Handshake
Certificate
1 4 0.2429 (0.0000) S>C Handshake
ServerKeyExchange
1 5 0.2429 (0.0000) S>C Handshake
ServerHelloDone
1 6 0.4965 (0.2536) C>S Handshake
ClientKeyExchange
1 7 0.4965 (0.0000) C>S ChangeCipherSpec
1 8 0.4965 (0.0000) C>S Handshake
1 9 0.5040 (0.0075) S>C ChangeCipherSpec
1 10 0.5040 (0.0000) S>C Handshake
ERROR: Length mismatch
来自 apache error.log
[Fri Aug 27 14:50:05 2010] [debug] ssl_engine_io.c(1892): OpenSSL: I/O error, 5 bytes expected to read on BIO#b80c1e70 [mem: b8100918]
服务器是 ubuntu 10.04.1
Apache 版本是 2.2.14-5ubuntu8
openssl 版本是 0.9.8k-7ubuntu8
答案1
看起来您的 SSL 握手在密码协商期间中断了。
我会检查您的 SSLCipherSuite Apache 配置指令。下面的 URL 指向此指令的 Apache 文档。
http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslciphersuite
双方必须支持一组通用的密码,否则连接将失败。
希望这可以帮助。
答案2
仅列出了 443 主机的 conf 文件,没有列出 80 主机的 conf 文件。我已将其复制如下:
名称virtualHost *:80
文件根目录 /var/www/
服务器名称 yeswedeal.com:80
ProxyPass /http://yeswedeal.com/ ProxyPassReverse / http//yeswedeal.com/
CustomLog /var/log/apache2/myservername-access.log 合并的ErrorLog /var/log/apache2/myservername-error.log
如果我理解正确的话,重写语法应该放在 *:80 站点,而不是 *:443 站点。对吗?