2013-08-28 4 views
2

Я использовал IIS 7 в Windows Server Enterprise 2008 для создания самозаверяющего сертификата для использования с IIS (в основном, нажмите кнопку).curl openssl не может проверить самоподписанный сертификат IIS 7, даже если он добавлен в curl-ca-bundle.crt

Однако даже при экспорте и добавить этот сертификат на под управлением Windows клиента завиток-ча-bundle.crt, ни его, ни openssl.exe не будет проверять сертификат правильно:

openssl s_client -CAfile curl-ca-bundle.crt -showcerts -connect myserver.ad.pri:443 

CONNECTED(00000003) 
depth=0 /CN=myserver.ad.pri 
verify error:num=20:unable to get local issuer certificate 
verify return:1 
depth=0 /CN=myserver.ad.pri 
verify error:num=21:unable to verify the first certificate 
verify return:1 
--- 
Certificate chain 
0 s:/CN=myserver.ad.pri 
    i:/CN=myserver.ad.pri 
-----BEGIN CERTIFICATE----- 
MIIDADCCAeigAwIBAgIQTi9gdBLdo6pJ1h4Zljr/wzANBgkqhkiG9w0BAQUFADAp 
.... 
-----END CERTIFICATE----- 
--- 
Server certificate 
subject=/CN=myserver.ad.pri 
issuer=/CN=myserver.ad.pri 
--- 
No client certificate CA names sent 
--- 
SSL handshake has read 924 bytes and written 444 bytes 
--- 
New, TLSv1/SSLv3, Cipher is AES128-SHA 
Server public key is 2048 bit 
Compression: NONE 
Expansion: NONE 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : AES128-SHA 
    Session-ID: 

    Session-ID-ctx: 
    Master-Key: 
    Key-Arg : None 
    Start Time: 1377728216 
    Timeout : 300 (sec) 
    Verify return code: 21 (unable to verify the first certificate) 
--- 
read:errno=104 

Я использовал IE для экспортировать сертификат на базу 64-кодированы, который является OpenSSL-читаемый, как PEM: OpenSSL x509 -in-информ РЕМ myserver.crt -text

Certificate: 
    Data: 
     Version: 3 (0x2) 
     Serial Number: 
      4e:2f:60:74:12:dd:a3:aa:49:d6:1e:19:96:3a:ff:c3 
     Signature Algorithm: sha1WithRSAEncryption 
     Issuer: CN=myserver.ad.pri 
     Validity 
      Not Before: Aug 26 15:38:46 2013 GMT 
      Not After : Aug 26 00:00:00 2014 GMT 
     Subject: CN=myserver.ad.pri 
     Subject Public Key Info: 
      Public Key Algorithm: rsaEncryption 
      RSA Public Key: (2048 bit) 
       Modulus (2048 bit): 
        .... 
       Exponent: 65537 (0x10001) 
     X509v3 extensions: 
      X509v3 Key Usage: 
       Key Encipherment, Data Encipherment 
      X509v3 Extended Key Usage: 
       TLS Web Server Authentication 
    Signature Algorithm: sha1WithRSAEncryption 
     ... 
-----BEGIN CERTIFICATE----- 
.... 

OpenSSL/ротор с тем же завитка-CA-bundle.crt проверит сертификаты с google.com:443 и т. д. просто отлично.

+0

У меня такая же проблема, и я не могу понять, почему. – Mine

ответ

2

Я решил это с помощью openssl для создания самоподписанного сертификата CA, а затем создал запрос сертификата сервера (также в OpenSSL, по какой-либо причине openssl не любит подписывать запросы, сгенерированные IIS), подписал его с предыдущим CA, затем экспортируется в PKCS12. Затем импортируется в IIS. После того, как CA сертификат добавляется к скручиванию-ча-bundle.crt, он будет правильно проверить цепь:

Сформировать CA:

openssl req -new -x509 -days 3650 -extensions v3_ca \ 
-keyout cakey.pem -out cacert.pem -config /etc/ssl/openssl.cnf \ 
-newkey rsa:2048 

Генерировать запрос ключа сервера и подписи:

openssl req -new -nodes -out server-csr.pem -keyout server-key.pem -newkey rsa:2048 

Подписать запрос с ЦС:

openssl ca -config /etc/ssl/openssl.cnf -cert cacert.pem -keyfile cakey.pem \ 
-out server-cert.pem -in server-csr.pem 

Экспорт сервер серт в PKCS # 12:

openssl pkcs12 -export -out server-key-cert.pfx \ 
-inkey server-key.pem -in server-cert.pem -certfile cacert.pem 

Импортировать сервер-ключ-cert.pfx в IIS. (Re) связывают привязку SSL привязки сайта к сертификату.

Добавить cacert.pem в curl-ca-bundle.crt клиентов. openssl s_client -showcerts -CAfile curl-ca-bundle.crt -connect server: 443 имеет глубину 0 и 1 и будет проверять возврат.

Примечание: Убедитесь, что keyUsage = неотказуемость, DigitalSignature, keyEncipherment включена в разделе [usr_cert] в openssl.cnf запросов других не будет содержать те keyUsage и IIS будет жаловаться на связывание.

+1

Любая идея, почему openssl не принимает сертификаты IIS? Я использую команды 'openssl req -x509 -nodes -days 365 -newkey rsa: 1024 -keyout cert.pem -out cert.pem' и' openssl pkcs12 -export -out cert.pfx -in cert.pem -name "Сертификат Friendly Назовите «', чтобы сгенерировать сертификат и импортировать в IIS, и он работает. – Mine

+0

может быть ошибкой кодирования? Если IIS выталкивает UTF16-кодированный файл (например, блокнот/другие окна), хотя base64 является ascii, может быть, что openssl не будет его читать. – cowbert

2

Я также столкнулся с этим (и я очень удивлен, что больше людей этого не сделали.), Когда я не смог получить HTTP-клиента NodeJS для подключения к экземпляру IIS с самозаверенным сертификатом на он (один создан через диспетчер IIS) Просто получил страшный «неспособный проверить первую ошибку сертификата!

Похоже, что это потому, что сертификаты, созданные IISManager для этой цели, указывают некоторые расширения «Использование ключа»; «Шифрование ключа» и «Шифрование данных».

Оказывается, что когда OpenSSL встречает сертификат, который определяет «Key Usage» но не определяет использование в «certSign», то код OpenSSL будет скидка этот сертификат в качестве возможного сертификата ЦС, даже если оно было правильно предусмотрено к коду openssl (что означает, что он не может проверить сертификат по указанному отсутствующему CA!).

(см логика здесь https://github.com/openssl/openssl/blob/6f0ac0e2f27d9240516edb9a23b7863e7ad02898/crypto/x509v3/v3_purp.c#L503)

Решение, как тот уже выше, что создавать свои собственные сертификаты с правильными ключевыми использований (или без каких-либо ключевых расширений использования!)

Я также подумал, что я должен включить альтернативный способ создания сертификата Self Signed, которому клиенты openssl будут довольны, если вы находитесь в Windows land.

Сначала скачайте скрипт PowerShell из here

В Powershell консоли (административной) выполнить следующие команды в папке, которая содержит загруженные скрипты

New-SelfsignedCertificateEx -StoreLocation "LocalMachine" -KeyUsage "DigitalSignature,KeyEncipherment,KeyCertSign" -Subject "CN=<HOST_NAME_TO_USE>" -FriendlyName "<HOST_NAME_TO_USE>" -SignatureAlgorithm sha256 -SubjectAlternativeName "<HOST_NAME_TO_USE>","anotherhost.org","someotherdomain.com" 

После того, как вы выполнили выше команду ваш магазин LocalMachine \ Personal Certificates будет содержать самозаверяющий сертификат, который может использоваться IIS для его SSL-связи. (Обратите внимание, что вам также может понадобиться скопировать этот сертификат в один из магазинов Trusted Root, чтобы гарантировать, что сертификат доверен на этом компьютере)

 Смежные вопросы

  • Нет связанных вопросов^_^