Добавьте сертификат SSL после вихревой ошибки: “не мог получить локальный сертификат выпускающего”

Я пытаюсь получить доступ к партнерам SOAP API для той цели, я сделал CSR и получил CRT. Я сделал файл PEM со своим ключом и CRT:

cat mycert.crt mykey.key > mycertandkey.pem

Когда я пытаюсь поразить сервис завихрением:

curl --verbose --cert mycertandkey.pem https://partner/service?wsdl
* Hostname was NOT found in DNS cache
*   Trying IP.IP.IP.IP...
* Connected to PARTNER (IP.IP.IP.IP) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

Теперь, когда я пробую-k опцией, все хорошо работает, но я добавил бы их текущий сертификат SSL, таким образом, я могу соединиться без-k опции.

Я хотел бы попробовать вторую опцию в следующем ответе, но не справился до сих пор: https://stackoverflow.com/a/24618403/2730032

Я получил различные сертификаты от своего сервиса партнеров с openssl как в: https://stackoverflow.com/a/7886248/2730032

Впоследствии я пытался добавить эти сертификаты своему серверу с https://superuser.com/a/437377

Но до сих пор я все еще не могу заставить завихрение работать без флага-k. Я нахожусь неправильно в том, как я получаю необходимый сертификат или в том, как я добавляю его к своей системе? Или действительно ли я ошибаюсь в своем общем подходе?

РЕДАКТИРОВАНИЕ 1: Это - то, что происходит, когда я пытаюсь получить сертификаты через SSL

openssl s_client -showcerts -connect PARTNER:443 </dev/null
CONNECTED(00000003)
depth=0 O = PARTNER_INFO, OU = PARTNER_INFO, CN = PARTNER_INFO
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 O = PARTNER_INFO, OU = PARTNER_INFO, CN = PARTNER_INFO
verify error:num=27:certificate not trusted
verify return:1
depth=0 O = PARTNER_INFO, OU = PARTNER_INFO, CN = PARTNER_INFO
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
 0 s:/O=PARTNER_INFO/OU=PARTNER_INFO/CN=PARTNER_INFO
   i:/C=PARTNER_INFO/ST=PARTNER_INFO/L=PARTNER_INFO/O=PARTNER_INFO/OU=PARTNER_INFO/CN=PARTNER_INFO CA/emailAddress=PARTNER_INFO
-----BEGIN CERTIFICATE-----
CERTIFICATE1
-----END CERTIFICATE-----
 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
-----BEGIN CERTIFICATE-----
CERTIFICATE2
-----END CERTIFICATE-----
 2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
-----BEGIN CERTIFICATE-----
CERTIFICATE3
-----END CERTIFICATE-----
---
Server certificate
subject=/O=PARTNER_INFO/OU=PARTNER_INFO/CN=PARTNER_INFO
issuer=/C=PARTNER_INFO/ST=PARTNER_INFO/L=PARTNER_INFO/O=PARTNER_INFO/OU=PARTNER_INFO/CN=PARTNER_INFO CA/emailAddress=PARTNER_INFO
---
No client certificate CA names sent
---
SSL handshake has read 3872 bytes and written 503 bytes
---
MORE INFO...

Я также попробовал openssl s_client -showcerts -key mycertandkey.pem -connect PARTNER:443 </dev/null но это дает мне те же результаты (и сертификаты).

РЕДАКТИРОВАНИЕ 2: Поскольку я прокомментировал в единственном ответе до сих пор: рассматриваемый партнер добавил CA Gandi к их серверу (по крайней мере это - то, что они говорят мне), и он теперь работает. Таким образом, это кажется, так как их сертификат теперь подписывается CA, который находится в моем пакете CA по умолчанию, я могу теперь заставить завихрение работать без флага-k. Однако было бы хорошо знать, как я, возможно, исправил проблему на своем конце.

3
задан 23 May 2017 в 14:33
2 ответа

Опция --cert предназначена для указания собственного сертификата (клиентского сертификата). Но он не проверяет сертификат сервера. Для указания этого сертификата используйте либо --cacert, либо --capath, в зависимости от того, как у вас есть серверный сертификат/CA (смотрите документацию по curl). Обратите внимание, что обычно у вас нет закрытого ключа для сертификата серверов, поэтому нужно дать только сертификат w/o ключа.

.
0
ответ дан 3 December 2019 в 08:08

Предполагая, что ваша система с curl обновлена ​​и имеет последние сертификаты CA от вашего поставщика, вам не следует импортировать какие-либо сертификаты. Импорт сертификата для домена, которым вы не владеете, всегда должен быть крайней мерой. В этом случае настройте задание cron, чтобы ежемесячно отправлять электронное письмо вам и партнеру, чтобы напомнить вам обоим, что необходимо исправить это. Импорт чужого сертификата вызовет у вас проблемы позже, когда этот сертификат истечет. Теперь вам нужно управлять сертификатами, которые вам не принадлежат. Обращайтесь к партнеру или поставщику, пока они не исправят установку сертификата.

Попросите их протестировать свой сайт:

Тестирование через веб-интерфейс

Qualys

SSL Shopper

Из командной строки

TestSSL Для этого требуются только openssl и bash. Это полезно для vips / конечных точек, которые не открыты для всего Интернета, например для промежуточных сайтов.

Просто git clone https://github.com/drwetter/testssl.sh.git затем используйте testssh.sh для проверки службы https.

После того, как сайт SSL будет правильным

Теперь вам нужно убедиться, что сертификаты CA в вашей операционной системе серверов актуальны. Метод их обновления зависит от дистрибутива ОС и будет оставлен на усмотрение ваших системных администраторов.

Импорт сертификатов

После того, как вы убедились, что ваш партнерский сайт настроен правильно; это означает, что он правильно проверяется в Qualys, SSL Shopper и TestSSL.sh, затем

Скопируйте сертификат в / etc / pki / ca-trust / source / anchors / , импортируйте и проверьте его.

cp /path/to/bad_partner_cert.pem /etc/pki/ca-trust/source/anchors/
update-ca-trust enable
update-ca-trust extract
openssl verify /etc/pki/ca-trust/source/anchors/bad_partner_cert.pem

Опять же, это должно быть крайним средством и очень временным , поскольку теперь вы управляете сертификатом, который вам не принадлежит.

0
ответ дан 3 December 2019 в 08:08

Теги

Похожие вопросы