...错误:14090086:SSL 例程:ssl3_get_server_certificate:证书验证失败”
您正在使用名称连接到服务器sphinx.dcu.ie
:
$connection = new AMQPSSLConnection('sphinx.dcu.ie', 5671, ...)
但是,证书中的主机名是samqp.dcu.ie
:
X509v3 Subject Alternative Name:
DNS:samqp.dcu.ie
你需要做两件事之一。首先,对证书中指定的服务器发出 RabbitMQ 请求。或者第二,获取一个新证书,该证书使用您要使用的 DNS 名称。
您可以在主题备用名称 (SAN)中放置任意数量的 DNS 名称。我经常用调试和测试名称填充它们,localhost
例如localhost.localdomain
和127.0.0.1
.
编辑:对于这个问题:
...服务器的日志现在说:
=ERROR REPORT==== 3-Mar-2016::09:52:41 ===
SSL: certify: ssl_handshake.erl:1490:Fatal error: unknown ca
您需要返回问题的第 9 版左右的信息以及此信息:
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = NL, ST = Noord-Holland, L = Amsterdam, O = TERENA, CN = TERENA SSL High Assurance CA 3
verify return:1
depth=0 businessCategory = Government Entity, jurisdictionC = IE, serialNumber = Government Entity, street = Glasnevin, street = Dublin City University, postalCode = IE, C = IE, ST = Ireland, L = Dublin, O = Dublin City University, OU = ISS, CN = samqp.dcu.ie
verify return:1
您不需要ca-cert.pem
包含数百个 CA 且其中大部分是错误的文件。您只需要一个正确的 CA,它曾经被称为DigiCert High Assurance EV Root CA。您还需要一个名为TERENA SSL High Assurance CA 3的中间产品
DigiCert 高保证 EV 根 CA 证书
您可以从DigiCert Trusted Root Authority Certificates下载DigiCert High Assurance EV Root CA。它具有以下属性:
- 序列号:02:AC:5C:26:6A:0B:40:9B:8F:0B:79:F2:AE:46:25:77
- 指纹:5FB7EE0633E259DBAD0C4C9AE6D38F1A61C7DC25
当你下载它时,它是 DER 格式的。您需要使用以下命令将其转换为 PEM 格式:
$ openssl x509 -inform der -in DigiCertHighAssuranceEVRootCA.crt \
-outform PEM -out DigiCertHighAssuranceEVRootCA.pem
然后:
$ cat DigiCertHighAssuranceEVRootCA.pem
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
...
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
TERENA SSL 高保证 CA 3 证书
现在您需要对TERENA SSL High Assurance CA 3做同样的事情。我相信您可以在TERENA SSL High Assurance CA Root Certificates找到它。它具有以下属性:
- 序列号 0b:5c:34:35:67:5b:24:67:c0:d7:32:37:f9:0d:5f:94
- 指纹 SHA1 A7:8A:AB:DE:7F:5B:77:15:40:D3:33:B5:05:87:4C:82:04:AA:D2:06
MY-CACERT.pem
现在您已经有了路径构建所需的 CA,请执行以下操作:
$ cat DigiCertHighAssuranceEVRootCA.pem > my-cacert.pem
$ cat TERENA_SSL_High_Assurance_CA_3.pem >> my-cacert.pem
$ echo "" >> my-cacert.pem
然后:
$ cat my-cacert.pem
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
...
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
+OkuE6N36B9K
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE4DCCA8igAwIBAgIQC1w0NWdbJGfA1zI3+Q1flDANBgkqhkiG9w0BAQsFADBs
...
dnnqz5SeAs6cbSm551qG7Dj8+6f/8e33oqLC5Ldnbt0Ou6PjtZ4O02dN9cnicemR
1B0/YQ==
-----END CERTIFICATE-----
最后,使用my-cacert.pem
.
您应该能够使用 OpenSSL 的s_client
. 但我似乎无法与外界联系:
$ openssl s_client -connect sphinx.dcu.ie:5671 -tls1 \
-servername sphinx.dcu.ie -CAfile my-cacert.pem
如果你可以连接,那么你应该得到一个Verify Ok (0)
(如果我没记错的话)。