3

Windows Server Enterprise 2008 で IIS 7 を使用して、IIS で使用する自己署名証明書を生成しました (基本的にワンクリック ボタン)。

ただし、この証明書をエクスポートして Windows クライアントの curl-ca-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 を使用して、PEM として openssl で読み取り可能な Base-64 Encoded に証明書をエクスポートしました: openssl x509 -inform PEM -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-----
....

同じ curl-ca-bundle.crt を使用した openssl/curl は、google.com:443 などからの証明書を正常に検証します。

4

2 に答える 2

2

openssl を使用して自己署名 CA 証明書を作成することでこれを解決し、サーバー証明書要求を作成し (OpenSSL でも、何らかの理由で openssl は IIS によって生成された要求に署名することを好みません)、以前の CA 証明書で署名してから、 PKCS12 にエクスポートされます。次に、IIS にインポートします。CA 証明書が curl-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

CA でリクエストに署名します。

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

server-key-cert.pfx を IIS にインポートします。サイト バインディングの SSL バインディングを証明書に (再) バインドします。

クライアントの curl-ca-bundle.crt に cacert.pem を追加します。openssl s_client -showcerts -CAfile curl-ca-bundle.crt -connect server:443 には深さ 0 と 1 があり、リターンを検証します。

: keyUsage = nonRepudiation、digitalSignature、keyEncipherment が openssl.cnf の [usr_cert] セクションで有効になっていることを確認してください。そうしないと、リクエストにこれらの keyUsage が含まれず、IIS がバインディングについて文句を言います。

于 2013-08-30T18:56:32.093 に答える