web-dev-qa-db-ja.com

サブジェクトの公開鍵情報は、同じCSRから作成された2つの異なる証明書で同じである必要がありますか?

最近、モバイルアプリの証明書ピン留めの設定に取り組みました。件名公開鍵情報(SPKI)のハッシュをピン留めに使用しています。同じ秘密キーから別の証明書を作成する場合、SPKIは同じであるという印象を受けました。それで私はそれを試しました-SSLと一致するCSRを使用して秘密鍵を作成しました。さて、私は異なるCSRを使用してこのCSRに2回署名しました。驚いたことに、SPKI(およびピンハッシュ)は同じではありませんでした。それは予想される動作ですか?それとも私が見逃しているものですか?証明書のPKIも署名されていますか?

これらは、私が使用したopensslコマンドです。

CSRを生成するには:

openssl req -new -sha256 -key private.key -out private.csr

CA秘密鍵を生成するには:

openssl genrsa -des3 -out ca.key 2048

CSRに署名するには:

openssl x509 -req -days 365 -in private.csr -signkey ca.key -out test.crt

これは、最初の証明書からのSPKIの始まりです。

BA 86 D3 0E E8 CC F3 C0 A2 B9 1E 8B BA 45 80 11 EF 13 CB 4F 76 CE A8 6A

そして、これは2番目の証明書からのSPKIの始まりです。

CC 96 B3 AB EA 0D FC 66 91 D8 E2 50 2B A7 8F 63 91 4C 7E 10 A3 48 1E 9F

ハッシュを計算するために、私は最も簡単な方法を使用しました-証明書をmacキーチェーンにインポートし、それらを開きます: certificate details

また、TrustKitの python script を使用して、証明書のピン留めハッシュを取得しましたが、これも異なりました。

3

CSRに署名するには:

 openssl x509 -req -days 365 -in private.csr -signkey ca.key -out test.crt

から man x509

-signkeyファイル名
...入力が証明書リクエストの場合、提供された秘密鍵を使用して自己署名証明書が作成されます。リクエスト

つまり、ca.keyをキーとして使用して自己署名証明書を作成し、意図したとおりにprivate.keyをキーとして使用して証明書を作成していません。異なるca.keyを使用しているので、生成された証明書内で異なるキーを取得し、異なるサブジェクトの公開キー情報を取得します。

代わりに、CAを作成し、それを使用して次のようにCSRに署名する必要があります。

$ openssl req -x509 -newkey rsa:4096 -keyout c0.pem -out c0.pem -days 365
$ openssl x509 -req -days 365 -in private.csr -CA c0.pem -CAcreateserial -out test0.crt

異なるCAで同じCSRを使用してこれを行うと、CSRに含まれている鍵を使用して、結果の証明書すべてに同じサブジェクト公開鍵情報が含まれていることがわかります。

4
Steffen Ullrich