我在 Ubuntu 10.04 上的 Apache/2.2.14 上运行 (自签名) SSL 证书站点,但各种浏览器在半数连接尝试中都出现错误。刚刚在 Chrome 中看到此瞬态错误:
"Error 126 (net::ERR_SSL_BAD_RECORD_MAC_ALERT): Unknown error."
点击刷新后问题会暂时消失。
wget 也一样:
$ wget --no-check-certificate https://dev.foo.com/deps/
--2010-09-08 19:30:26-- https://dev.foo.com/deps/
Resolving dev.foo.com... 184.72.53.220
Connecting to dev.foo.com|184.72.53.220|:443... connected.
OpenSSL: error:0407006A:rsa
routines:RSA_padding_check_PKCS1_type_1:block type is not 01
OpenSSL: error:04067072:rsa routines:RSA_EAY_PUBLIC_DECRYPT:padding check failed
OpenSSL: error:1408D07B:SSL routines:SSL3_GET_KEY_EXCHANGE:bad signature
Unable to establish SSL connection.
立即再次运行它并且它有效:
$ wget --no-check-certificate https://dev.foo.com/deps/
--2010-09-08 19:30:29-- https://dev.foo.com/deps/
Resolving dev.foo.com... 184.72.53.220
Connecting to dev.foo.com|184.72.53.220|:443... connected.
WARNING: cannot verify dev.foo.com's certificate, issued by
`/CN=dev.foo.com':
Self-signed certificate encountered.
HTTP request sent, awaiting response... 200 OK
Length: 3157 (3.1K) [text/html]
Saving to: `index.html'
100%[======================================>] 3,157 --.-K/s in 0s
2010-09-08 19:30:29 (48.6 MB/s) - `index.html' saved [3157/3157]
在我的 sites-enabled/default-ssl 中:
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
证书:
-----BEGIN CERTIFICATE-----
MIIBszCCARwCCQCa0TzNwqLgsTANBgkqhkiG9w0BAQUFADAeMRwwGgYDVQQDExNk
ZXYucGFydHlvbmRhdGEuY29tMB4XDTEwMDgyNzA2MzA1N1oXDTIwMDgyNDA2MzA1
N1owHjEcMBoGA1UEAxMTZGV2LnBhcnR5b25kYXRhLmNvbTCBnzANBgkqhkiG9w0B
AQEFAAOBjQAwgYkCgYEAzXDEULpCUqIc9hV/ESFapkckR2uoYINA81DvG2aQZ9Ot
Q30OwX2ae2CC4bSzJEIVlahU8vjVrWpmpa28NEhQbqh4ywwbl1XDrEVYI6Gkfimf
snJhOKyaVrEhlwutYtBjmsz3ZIqwymMPm/6smVcSS5dJIynlSmtltxX6ivPcO8UC
AwEAATANBgkqhkiG9w0BAQUFAAOBgQBGxHVkpSSOnZjzuySRepjhAlV/yhe9Fx23
fh12WrjQMEi98B7JEuNSLXDWckUN7O6XRc3RzKmazcGHJqzhn0Ov6gAmAE2XjZ/x
VW21xmaLwk+KgYKFJbJJaP3jMSpU7I3aa11wqAkR2Zd4Nkm9N0YXYIzcBdfztTVI
Et8mEHBFdg==
-----END CERTIFICATE-----
该证书依次通过以下方式生成:
$ make-ssl-cert generate-default-snakeoil --force-overwrite
Apache 版本。
$ apache2 -V
Server version: Apache/2.2.14 (Ubuntu)
Server built: Apr 13 2010 20:22:19
Server's Module Magic Number: 20051115:23
Server loaded: APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/worker"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=""
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"
我不管理网络、硬件等 - 所有这些都在 Amazon EC2 上运行。我没有在服务器前面运行负载平衡器或其他任何东西。我正在与该主机建立直接 TCP 连接(据我所知)。
有什么想法吗?提前感谢你的帮助。
答案1
您遇到的问题是,浏览器收到的消息上的签名偶尔是错误的。
发生这种情况的原因有很多。例如,您可能遇到了 openssl 错误、硬件故障(RAM 或 CPU 损坏)、密钥出现某种奇怪的巧合(可能性极低)。或者,您可能遇到了 MAC 旨在检测的情况:有人可能正在篡改您的流量。
由于您的证书是自签名的,请继续替换它,重新启动 apache,然后继续,这只是一个故障排除步骤。如果这不起作用,请检查您是否正在运行最新版本的 openssl(或者只是为了好玩而更改 openssl 版本)。如果您仍然收到 MAC 错误,请调查您是否发生了硬件故障或网络篡改。
错误的这一部分尤其引人注目:
OpenSSL: error:04067072:rsa routines:RSA_EAY_PUBLIC_DECRYPT:padding check failed
这表明该消息很可能已从签名的版本修改,甚至可能被截断。
答案2
首先,对于最终用户来说,自签名证书通常比廉价的 SSL 证书更麻烦。如果您有任何类型的公共接口,甚至有大量内部用户,我不建议使用它们。浏览器对自签名证书的要求越来越严格,拒绝默认信任。
其次,一台机器上有几个不同的信任存储。
Linux 通常使用 NSS(mozilla),但其他浏览器可能也有自己的信任库。
证书可能设置了错误的 OID 等。我们需要查看实际证书。PKI 实际上并不对证书保密 - 只对私钥保密。
请用http://pkif.sourceforge.net/pitt.html并告诉我们您存在哪些错误,或者没有哪些错误。
谢谢。
答案3
我不是程序员所以请对我宽容一点:)
几天前,我在 Chrome 中访问我的 gmail 帐户时遇到问题,错误 126 (net::ERR_SSL_BAD_RECORD_MAC_ALERT)。也许你的问题与我的类似?所以我找到了帖子http://www.luvfree.com/forums/general_discussion/i_cannot_access_to_my_gmailcom_error_126_neterr_ssl_bad_record_mac_alert_in_chro.htm这是约会网站 luvfree.com,但他们的建议对我有帮助。
也许您的问题也出在路由器上。
解决这个问题的方法是升级路由器中的固件。
答案4
很多事情都可能出错。我认为,如果不知道您的网络配置、Apache 的配置方式、负载平衡的实现方式、使用的循环类型以及网络的其他硬件方面,任何人都无法回答这个问题。
对我来说,这看起来像是在 SSL 主机名验证器上收到了与主机名不匹配的意外响应?