... error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed"
Вы подключаетесь к серверу с именем sphinx.dcu.ie
:
$connection = new AMQPSSLConnection('sphinx.dcu.ie', 5671, ...)
Однако имя хоста в сертификате samqp.dcu.ie
:
X509v3 Subject Alternative Name:
DNS:samqp.dcu.ie
Вам нужно сделать одну из двух вещей. Во-первых, сделайте запрос RabbitMQ на сервер, указанный в сертификате. Или, во-вторых, получите новый сертификат, выданный с именем DNS, которое вы хотите использовать.
Вы можете разместить столько DNS-имен, сколько захотите, в Subject Alternate Name (SAN). Я часто заполняют их отладки и тестирования имен, как localhost
, localhost.localdomain
и 127.0.0.1
.
EDIT: Для этого выпуска:
... and server's log now says:
=ERROR REPORT==== 3-Mar-2016::09:52:41 ===
SSL: certify: ssl_handshake.erl:1490:Fatal error: unknown ca
Вы должны вернуться к информации для Revision 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, и это называется: DigiCert High Assurance EV Root CA. Кроме того, необходимо промежуточное один называется TERENA SSL High Assurance CA 3
DigiCert High Assurance EV Root CAсертификат
Вы можете скачать DigiCert High Assurance EV Root CA от DigiCert Trusted Root Authority Certificates. Она имеет следующие атрибуты:
- Серийный номер: 02: AC: 5C: 26: 6A: 0B: 40: 9B: 8F: 0B: 79: F2: АЕ: 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 High Assurance CA 3сертификат
Теперь вы должны сделать то же самое вещь с TERENA SSL High Assurance CA 3. Я считаю, вы можете найти его на TERENA SSL High Assurance CA Root Certificates. Его один с атрибутами:
- Серийный номер 0b: 5с: 34: 35: 67: 5b: 24: 67: с0: d7: 32: 37: f9: 0d: 5f: 94
- отпечатков пальцев SHA1 A7: 8A: АВ: DE: 7F: 5B: 77: 15: 40: D3: 33: В5: 05: 87: 4C: 82: 04: АА: D2: 06
my- CACERT.PEM
Теперь, когда у вас есть центры сертификации, необходимые для pathbuilding, выполните следующие действия:
$ 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)
(если я правильно помню).
Пожалуйста, укажите точный URL-адрес, который вы используете для подключения к серверу, и опубликуйте вывод 'openssl s_client -connect: -tls1 -servername | openssl x509 -text -noout'. Сделайте это, добавив его в свой вопрос, нажав * Edit * (и не публикуйте его в качестве комментария). В противном случае мы не сможем воспроизвести его, и нет достаточной информации, чтобы помочь устранить ее. –
jww
Я поставил фактический URL-адрес в код экземпляра $ connection. Я также разместил вывод команды и обновил имена файлов и пути к реальным. –
Спасибо @ Djuro. Информация была легко диагностирована. Я желаю, чтобы все это предоставили. – jww