Как отладить цепочки сертификата с OpenSSL?

Я абсолютно плохо знаком с OpenSSL, и я читаю учебное руководство на программировании OpenSSL для соединения с сервером:

www.rtfm.com/openssl-examples/part1.pdf
www.rtfm.com/openssl-examples/part2.pdf

Somehow, настраивающий корректные сертификаты, более хитер, чем ожидалось... :(

Когда я тестирую сообщение с openssl s_client:

openssl s_client - соединяются 123.456.789.0:666-CAfile test.crt - отладка

Я получаю сообщение об ошибке

depth=2 C = ГБ, ST = Большой Манчестер, L = Солфорд, O = COMODO CA Limited, CN = Центр сертификации COMODO RSA проверяет, что error:num=20:unable для получения локального сертификата выпускающего проверяют return:0

и затем:

предупреждение error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 плохой certificate:s3_pkt.c:1257:SSL предупреждает квитирование номер 42 140685406562208:error:140790E5:SSL routines:SSL23_WRITE:ssl failure:s23_lib.c:177:

Вот цепочка сертификата:

 Certificate chain  
 0 
   s:myself    
   i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA  
 1 
   s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Organization Validation Secure Server CA    
   i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority  
 2 
   s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Certification Authority    
   i:/C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root

Я пытаюсь заставить систему распознавать эти сертификаты как корректные в течение многих часов теперь, но напрасно...

Что я попробовал до сих пор:

  • различные изменения добавления сертификата о COMODO к списку доверяемых сертификатов при помощи update-ca-trust.
  • добавление сертификатов списку доверяемых сертификатов в/etc/ssl/certs
  • создание pem файлы в папке и добавление их с-CApath.
  • Проблема с Google состоит в том, что большинство учебных руководств обсуждает это с точки зрения администратора сервера, но у меня нет доступа к серверу.

Операционная система является Fedora.

Существует ли структурированный способ заняться этой проблемой?


Править: сертификат был создан следующим образом:

 openssl req -new -x509 -sha256 -days 365 -key mykey.key -out test.crt
4
задан 28 July 2014 в 20:12
2 ответа

Обязательно включите все промежуточные сертификаты и убедитесь, что они актуальны. Если test.crt на самом деле является файлом, содержащим только /C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root, то это правильный подход. Вы можете включить и корень, и большинство клиентов примет такие цепочки, но некоторые из них задохнутся.

Обычно лучше всего включать все сертификаты от вашего до последнего перед корнем, в случае, если у клиента нет последнего промежуточного звена.

Также возможно, что test.crt содержит вещи, отличные от правильной цепочки. OpenSSL не делает частичной проверки цепочки по умолчанию (в более старых версиях это вообще не делается). При работе в этом режиме ему все равно, что находится в /etc/ssl/certs.

В качестве альтернативы, вы можете предъявить просроченный промежуточный сертификат. УЦ часто выписывают свои промежуточные сертификаты одним и тем же ключом; если они это делают, просто загрузите обновленный промежуточный сертификат УЦ и замените просроченный сертификат в вашей цепочке.

Наконец, с помощью openssl s_client, вам нужно указать, с чем он проверяется. Например, используйте опцию -CApath /etc/ssl/certs или -CAfile your_ca.crt. Для первой опции используйте хранилище доверия вашей системы, а для второй - укажите сертификат корневого ЦС.

.
5
ответ дан 3 December 2019 в 02:57

Сравните файлы сертификатов друг с другом.

По умолчанию у нас есть 3 файла (на основе обычного CA или самозаверяющего):

  • (закрытый) ключ
  • ( общедоступный) сертификат
  • (общедоступный) файл центра сертификации (цепочка) <- вкл. все посредники

Итак, подходит ли ключ к сертификату, а сертификат - к CA? Аннотация:Хотя имена похожи на * .crt или * .key, формат - PEM

# (openssl x509 -noout -modulus \
  -in /path/to/server.crt | \
  openssl md5 ; openssl rsa  -noout -modulus \
  -in /path/to/server.key | openssl md5) | uniq

Ожидаемый результат - ровно 1 строка, например

(stdin)= a634dfd21796c72dcf8c809d3bacc966

Если вы видите 2 строки, значит ключ и сертификат НЕ совпадают.

Если все в порядке, продолжайте с

# openssl verify -CAfile /path/to/ca.crt /path/to/server.crt

. Вы хотите увидеть

server.crt: OK

. Если один из двух шагов завершился неудачно, рекомендуется воссоздать сертификаты / ключи. Если оба в порядке, вы знаете, что вам нужно искать в другом месте, чтобы устранить ваши препятствия (разрешения, измененный CA, одна сторона работает с openssl, а другая с GNUTls, ...)

2
ответ дан 3 December 2019 в 02:57

Теги

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