OpenSSLを使用して次の公開鍵タイプの証明書を生成する方法を知っている人はいますか?
DHE_DSS
鍵交換用。DH_DSS
およびDH_RSA
鍵交換用。ECDH_ECDSA
およびECDH_RSA
鍵交換用。ECDHE_ECDSA
鍵交換用。オンラインで見つけることができるほとんどは、RSAタイプの証明書を生成する方法を教えています。
DSAキーペアの場合、これを使用します。
openssl dsaparam -out dsakey.pem -genkey 1024
「1024」はビット単位のサイズです。最初のDSA標準では、サイズは512..1024の範囲で64の倍数にする必要があります。次に、別のバージョンでは1024未満のサイズが非推奨になったため、有効なDSAキーのサイズは1024ビットで、それ以外は何もありませんでした。 現在のバージョン は、有効なDSAキーの長さが1024、2048、または3072ビットであることを指定します。 OpenSSLは他の長さも受け入れます。相互運用性を最大化するには、1024ビットを使用します。
ECDSA鍵ペアの場合、これを使用します。
openssl ecparam -genkey -out eckey.pem -name prime256v1
OpenSSLでサポートされている曲線名を確認するには、次を使用します:openssl ecparam -list_curves
(最適な相互運用性のために、OpenSSLが「prime256v1」という名前で知っているNIST曲線P-256に固執します。)
DSAまたはECDSAの鍵ペアを取得したら、公開鍵を含む自己署名証明書を生成し、秘密鍵で署名できます。
openssl req -x509 -new -key dsakey.pem -out cert.pem
(「dsakey.pem」を「eckey.pem」に置き換えて、上記で生成されたECキーを使用します。)
Diffie-Hellman(楕円曲線の有無にかかわらず)の場合、DHは署名アルゴリズムではないため、状況はより複雑になります。
OpenSSLの間、ライブラリは、DH公開鍵を含む証明書を発行するために必要なサポートを持っています。 このページ にはポインタが含まれる場合があります。課題は、OpenSSL、、コマンドラインツールを説得することです。 OpenSSLドキュメントのジャングルでは、それを行う完全な方法が見つかりませんでした。ただし、キーペアは簡単に生成できます。
OpenSSLコマンドラインツールでDHキーペアを生成するには、次の2つの手順で行う必要があります。
openssl dhparam -out dhparam.pem 1024
openssl genpkey -paramfile dhparam.pem -out dhkey.pem
ECDHキーペアの場合、これを使用します。
openssl ecparam -out ecparam.pem -name prime256v1
openssl genpkey -paramfile ecparam.pem -out ecdhkey.pem
ただし、ECDH公開鍵を含む証明書の形式は、ECDSA公開鍵を含む証明書の形式とまったく同じです。実際、この形式には、目的のアルゴリズム(ECDHまたはECDSA)を示さない「EC公開鍵」が含まれています。したがって、ECDSAの秘密鍵と証明書(ECDSA署名を生成するための秘密鍵、自己署名または他のCAによって署名された証明書)は、ECDH- *暗号スイートに適合します。
OpenSSLコマンドラインツールで生成する方法がわからない1つのケースは、静的Diffie-Hellman(非EC)証明書です。ただし、OpenSSLは静的DH暗号スイートでのSSL/TLSもサポートしていないため、証明書を作成できたとしても、OpenSSLでは機能しません。
(そして実際、実際には静的DHを使用する人はいません。)
ただ古い質問をしのぐ。最近、テスト用にDH証明書を作成する必要がありました。これがその方法です。最初に、トムの答えに従ってDHパラメータと秘密鍵を作成します。
openssl dhparam -out dhparam.pem 1024
openssl genpkey -paramfile dhparam.pem -out dhkey.pem
次に、公開鍵ファイルを作成します。
openssl pkey -in dhkey.pem -pubout -out dhpubkey.pem
次に、CSRファイルが必要です。 CSRは自己署名されており、DHは署名アルゴリズムではないため、DHに対して明らかに行うことはできません。しかし、とにかくdifferentキー(RSAなどの署名可能なキー)に対して1つ作成します。 RSAキーと関連するCSRを作成するには:
openssl genrsa -out rsakey.pem 1024
openssl req -new -key rsakey.pem -out rsa.csr
最後に、RSA CSRとDH公開鍵からDH証明書を生成します。 (上記のように)DHは署名アルゴリズムではないため、自己署名DH証明書を作成することはできません。したがって、CA証明書/キーを設定する必要があります。この例では、以前にCAkey.pemおよびCAcert.pemを作成したと想定しています。
openssl x509 -req -in rsa.csr -CAkey CAkey.pem -CA CAcert.pem -force_pubkey dhpubkey.pem -out dhcert.pem -CAcreateserial
DH証明書はdhcert.pemにあります