SafariはプライベートルートCA証明書を使用しません。

SafariはプライベートルートCA証明書を使用しません。

プライベートルートCAを作成し、いくつかのhttpsウェブサイトに対していくつかのSSL証明書を発行しました。

(これを自己署名証明書と呼ぶ必要があるかどうかはわかりません。私の場合、ルートCA証明書は自己署名されていますが、ルートCAによって発行されたWebサイトのSSL証明書は自己署名されていません。キーワードを選択してください)

これらのhttpsウェブサイトはChrome、Firefoxではうまく機能しますが、Safariではうまく機能しません。 (もちろん、ChromeとFirefoxではセキュリティ警告が表示されますが、引き続き表示される機会が提供されますが、Safariではセキュリティ警告は完全には表示されません。)

要点は、私のウェブサイトが証明書チェーンファイルを提供していることです。

The website certificate... +
The root CA certificate...

ChromeとFirefoxは証明書チェーンファイルにルートCAをインテリジェントに見つけることができますが、Safariはそうではありません。

Safariでエラーが報告されました。

Safariでページを開くことができない - Safariはサーバー名「servername」との安全な接続を確立できないため、Safariでページを開くことができません。

  • もちろん、ルートCA証明書をMacのキーチェーンに事前にインポートすることもでき、Safariは警告メッセージなしでうまく機能します。しかし、それは私が望むものではないので、ユーザーにそのような受動的な作業を要求することはできません。

  • 実際の自己署名SSL証明書(親CAなし)を生成すると、Safariはサイトを表示する機会を提供します。しかし、複数のhttps Webサイトを呼び出すいくつかのJavaアプリケーションがあり、証明書の検証を無視してはいけないので、これは私が望むものではありません。すべての関連https Webサイトに対して、Java cacertsキーストアに共通のルートCA証明書を登録したいと思います。自動的に信頼されます。

誰でもこの問題を解決する方法を教えてもらえますか?私の言葉はルートCAを事前に手動でインポートする必要はありませんが、ユーザーにWebサイトを表示する機会があります。。 ChromeとFirefoxは正常に動作します。

ルートCA証明書が見つかる場所をブラウザに伝えるために、いくつかの証明書拡張を指定します。他のより良い方法があるかどうかはわかりません。

感嘆符:

  • 「チェーンでも別の方法でも」新しいCA証明書を送信することは、ブラウザがそれを「賢明に」受け入れるという意味ではありません。ブラウザで「受け入れる」という意味ではなく、チェーンを通じて確認するという意味です。ユーザーに未知のルートCAのリスクを許可するかどうかを尋ねてください。

  • 「チェーンファイルはCAではありません」について:チェーンファイルにはルートCA証明書も含まれておらず、ブラウザにはプリインストールされているルートCAと同様にルートCA証明書を見つける方法があることがよくわかります。あるいは、「権利情報アクセス」証明書フィールドを介してルートCAを指すURLがあります。これは不明な領域であり、ブラウザの実装によって異なります。ブラウザがWebサイトのルートCAをどのようにインポートするのですか?証明書自体(信頼または受け入れるという意味ではありません)。

  • 私はAppleの指示に従いました。https://support.apple.com/en-us/HT210176

2021/02/12 編集:Safariで状況がますます興味深くなっています。

  • https://ip_addressが有効です。 (もちろん安全警告も併せて)
  • https://dns_nameが機能しません(セキュリティ警告も表示されません)。
  • https://dns_nameはプライベートブラウジングモードで動作します(もちろんセキュリティ警告を含む)。

いくつかの技術的な詳細を添付します。 Webサイトから返された証明書チェーンは次のとおりです。 (いくつかの敏感な名前をmy-hostと同じ単語に変更しました...)

$ echo Q | openssl s_client -showcerts -verify 5 -connect my-host.my-domain:443
verify depth is 5
CONNECTED(00000005)
depth=1 CN = My Root CA Name
verify error:num=19:self signed certificate in certificate chain
verify return:1
depth=1 CN = My Root CA Name
verify return:1
depth=0 CN = my-host.my-domain
verify return:1
---
Certificate chain
 0 s:CN = my-host.my-domain
   i:CN = My Root CA Name
-----BEGIN CERTIFICATE-----
MIIDqjCCApKgAwIBAgIJAIh7Dn2n363zMA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV
BAMMD1RyaWRlbnQgUm9vdCBDQTAeFw0yMTAyMDkwNDU4MzZaFw0yMjAzMTMwNDU4
......
+bnUvHgMmMukXgMLo3e6tnF/Za9z/BCv0KESoFEIg7uWo+IUZv8wXYI8YQEaeeGt
s2et3Js1eBqN1zle8ejoFuInQNS5wkalx0D+zTcCcXVvnUJm2womcKBxFAHJeZDg
vvbsua6FH0JTVjeprdmx1mKkj+MP4N664vP8kAj6
-----END CERTIFICATE-----
 1 s:CN = My Root CA Name
   i:CN = My Root CA Name
-----BEGIN CERTIFICATE-----
MIIDFzCCAf+gAwIBAgIJAIafS0ZYzGA4MA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV
BAMMD1RyaWRlbnQgUm9vdCBDQTAeFw0yMTAyMDkwNDU0MTdaFw0zMTAyMDcwNDU0
......
+b4lJl9fUHd01xqGbBGmp/BL8EI+IveSRTKr/Boi+klqvlgOi5TgUF/0R9gmwPRO
OXIL5hdA7CTsgaURWJ897p5JVYsPtofjnL10
-----END CERTIFICATE-----
---
Server certificate
subject=CN = my-host.my-domain

issuer=CN = My Root CA Name

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2449 bytes and written 432 bytes
Verification error: self signed certificate in certificate chain
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: F6FF34026A5B10EE149D442FA4035916330AE09AC2B771369EA0B94754501892
    Session-ID-ctx:
    Master-Key: BF444224C15CEDC3309F01E4C5DE8F8331AF9B82F0613601FE5D1B677F6526DD3FF97BB00DB3DC5BB0E35EA489861FF6
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - d6 5f 48 e0 90 10 48 22-46 83 7f 82 d1 a4 17 da   ._H...H"F.......
    0010 - 17 10 e8 1e e1 dc 17 58-9c 36 e8 d1 36 f5 d7 f6   .......X.6..6...
    ......
    00d0 - 85 63 2a 3c 0e 6c 18 f3-27 fb 21 7d bd 3d 8b 33   .c*<.l..'.!}.=.3
    00e0 - bf 3c 60 da 06 2e 23 3b-a0 f2 f6 88 5e 0c 2b f2   .<`...#;....^.+.

    Start Time: 1612937133
    Timeout   : 7200 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
    Extended master secret: yes
---
DONE

apache2(2.4.29 Ubuntu)設定:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        SSLEngine On
        SSLCertificateFile    /etc/apache2/certs/web_cert.pem
        SSLCertificateKeyFile /etc/apache2/certs/web_key.pem
        DocumentRoot /var/www
        LimitRequestFieldSize 32768
    </VirtualHost>
</IfModule>

/etc/apache2/certs/web_cert.pemは、実際にWebサイト証明書とルートCA証明書、つまり証明書チェーンファイルを関連付けたファイルです。

その他の情報:

ルートCA証明書:

# openssl x509 -text -noout < /etc/apache2/certs/root_ca_cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            86:9f:4b:46:58:cc:60:38
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = My Root CA Name
        Validity
            Not Before: Feb  9 04:54:17 2021 GMT
            Not After : Feb  7 04:54:17 2031 GMT
        Subject: CN = My Root CA Name
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    ......
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier:
                EE:BF:15:0D:35:BC:4C:92:88:4F:9B:21:FC:B6:C4:29:C4:35:9E:D3
            X509v3 Authority Key Identifier:
                keyid:EE:BF:15:0D:35:BC:4C:92:88:4F:9B:21:FC:B6:C4:29:C4:35:9E:D3

            X509v3 Key Usage:
                Certificate Sign, CRL Sign
    Signature Algorithm: sha256WithRSAEncryption
         ......

ルートCAキー

# openssl rsa -text -noout < /etc/apache2/certs/root_ca_key.pem
Private-Key: (2048 bit)
modulus:
    ......
publicExponent: 65537 (0x10001)
privateExponent:
    ......
prime1:
    ......
prime2:
    ......
exponent1:
    ......
exponent2:
    ......
coefficient:
    ......

ウェブサイト証明書:

# openssl x509 -text -noout < /etc/apache2/certs/web_cert.pem
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            88:7b:0e:7d:a7:df:ad:f3
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = My Root CA Name
        Validity
            Not Before: Feb  9 04:58:36 2021 GMT
            Not After : Mar 13 04:58:36 2022 GMT
        Subject: CN = my-host.my-domain
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    ......
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier:
                E2:83:31:54:D3:49:D1:5E:78:6C:29:84:15:C9:80:48:26:AF:7A:EF
            X509v3 Authority Key Identifier:
                keyid:EE:BF:15:0D:35:BC:4C:92:88:4F:9B:21:FC:B6:C4:29:C4:35:9E:D3
                DirName:/CN=My Root CA Name
                serial:86:9F:4B:46:58:CC:60:38

            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: critical
                TLS Web Server Authentication
            X509v3 Subject Alternative Name:
                DNS:my-host.my-domain, IP Address:100.100.100.100
    Signature Algorithm: sha256WithRSAEncryption
         ......

ウェブサイトの証明書キー:

# openssl rsa -text -noout < /etc/apache2/certs/web_key.pem
Private-Key: (2048 bit)
modulus:
    ......
publicExponent: 65537 (0x10001)
privateExponent:
    ......
prime1:
    ......
prime2:
    ......
exponent1:
    ......
exponent2:
    ......
coefficient:
    ......

キーチェーンの確認結果:

s# openssl verify -CAfile /etc/apache2/certs/root_ca_cert.pem < /etc/apache2/certs/web_cert.pem
stdin: OK

答え1

迷惑をかけて申し訳ありません。どの部分が最終的に機能するのかはわかりません。 HSTS plistとブラウザの履歴を消去して再起動した後、これは機能します。また、同じバージョンのMacOSを使用する両方のユーザーがうまく機能しており、私のMacbookと他の同僚のMacbookにのみ問題があることを確認しました。継ぎ目は、同じ名前で別のルートCAを手動で登録したためです。

要約:問題が発生すると、https over IPが機能し、プライベートブラウジングモードがdnsnameとipの両方に機能し、一部のユーザーに機能します。今私も動作します。もちろん、すべてセキュリティ警告が表示されます。問題は次のとおりです。 「Apple は、使用中の CA 証明書があり、トラストストアにない場合は、このオプションを提供しないことを意識的に決定しました。」ただし、これは最終的にブラウザのキャッシュやHSTSの設定などによるいくつかのローカル問題です。

関連情報