openssl pkcs12 エクスポートが余分なルート アンカー証明書を追加し、Mac OS X でサーバー証明書を複製するのはなぜですか?

openssl pkcs12 エクスポートが余分なルート アンカー証明書を追加し、Mac OS X でサーバー証明書を複製するのはなぜですか?

[元はSlack Overflowに投稿しかし、コメントスレッドでは不適切な会場について苦情が寄せられました。

私たちは StartCom SSL 証明書から Let's Encrypt への切り替えに取り組んでおり、macOS Server + Apache HTTPD で自動的に動作するように設定しようとしています。コマンドライン ツール ( security import) から、macOS Server は直接ファイルを受け入れません。macOS Server にファイルを与え、そこから Apache で構成するファイルを抽出する.pem必要があります。面倒で無意味ですが、今のところはこれで我慢するしかありません。.p12.pem

このファイルを作成するには.p12、次のコマンドを実行する必要があります。

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/chain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

ここで奇妙なことが起こります。出力example.com.p12ファイルにはexample.com証明書が含まれています2回、Let's Encrypt 中間 CA 証明書、不要な自己署名 DST Root CA X3 アンカー証明書 (すべてのブラウザーにデフォルトでインストールされている)、最後に秘密キーが続きます。その結果、Apache SSL ハンドシェイクにはサーバー証明書が 2 回、中間 CA 証明書、ルート証明書 (送信されるべきではない) が含まれることになり、Qualys SSL Labs テスターで警告が表示されます。

内部を確認したcert.pemところ、サーバー証明書のみ (1 回のみ) が含まれています。chain.pem中間 CA 証明書のみが含まれています (ルート アンカーやサーバー証明書ではありません) privkey.pem。秘密キーのみが含まれています。つまり、openssl pkcs12 -exportサーバー証明書を複製してから、ルート アンカー証明書を検索して追加するという追加の手順を実行することになります。

同じコマンドを openSUSE Linux で実行すると、出力.p12ファイルにはサーバー証明書 (1 回)、中間 CA 証明書、および秘密キーのみが含まれます。ルート アンカーはありません。

以下のバリエーションを試しましたが、出力に違いはありませんでした。

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

Linux マシンで不正な二重サーバー証明書の動作を再現する唯一の方法は、次の操作を実行することです (ただし、ルート アンカーはまだ含まれません)。

openssl pkcs12 -export \
-inkey /etc/letsencrypt/live/example.com/privkey.pem \
-in /etc/letsencrypt/live/example.com/cert.pem \
-certfile /etc/letsencrypt/live/example.com/fullchain.pem \
-out /etc/letsencrypt/live/example.com/example.com.p12

fullchain.pem( の代わりに を...chain.pemと組み合わせて使用​​すると、cert.pemサーバー証明書が重複する理由が十分に理解できますが、これは Mac OS X で使用しているコマンドではありません。)

openssl pkcs12 -exportここで正しいことを行うにはどうしたらよいか、何かアイデアはありますか?

関連情報