だから私は自分の研究をしていて、自分の問題に十分具体的なものを見つけていません。質問のタイトルのとおり、公開鍵だけでCSRを作りたいと思っています。私ができることは、選択した情報と新しいキーペアを使用してCSRを生成することです。次に、このようなものを使用して、証明書を作成するときに必要な公開鍵を使用するように強制します。
openssl x509 -req -in mycsr.pem -force_pubkey mypubkey.pem -CA dumyCA.pem -CAkey -dumyCA.pem -out mycert.pem
この後、出力された証明書を取得し、その属性を変更して秘密鍵に関連付けます。これはすべてうまく動作します。この問題は、私が言ったcsrを取得してCAに送信すると、csrの生成時に生成されたキーを使用した証明書が返されてしまうことです。したがって私の質問。
編集:だから私はキーペアを持っていますが、私の秘密キーはエクスポート機能のないHSMモジュールにあります。公開鍵の.pemファイルを取得できます。そして、私が与えたコマンドで証明書を作成した後、秘密鍵に関連付けるプログラムを使用して証明書を実行しました。だから私の新しい質問は、openssl APIを使用して自分のcsrを作成できるかどうかです。そのため、ファイルに保存しなくても秘密鍵で署名し、所有している公開鍵に関連付けることができます。
コマンドによって生成された証明書署名要求:
openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
公開鍵が含まれます。これは、PKIプロセスに従って必須です。エンティティ情報と公開鍵を含むCSRは、証明書の要求のために、任意の認証局に送信されます(つまり、CSR名です)。 CSRは、埋め込まれた公開鍵にリンクされた秘密鍵を使用して署名されます。
CAは、IDを評価した後、基本的にCSRに署名して有効な証明書を作成します。これは、クライアントに送信する証明書です。彼らがあなたのウェブサイトに接続するとき。
privateKey.key
ファイル内の秘密鍵は、送信されたメッセージを復号化するためにWebサーバーによって使用されます。この秘密鍵は決してサーバーから出てはなりません。
詳細については、 最も一般的なopenSSLコマンド を確認してください。
残念ながら、証明書署名要求を作成するには、実際には秘密鍵を使用する手段が必要です。 HSMについて話しているように、これは通常OpenSSLエンジンとして利用できます。
たとえば、Yubicoには documentation があり、Yubikeyで保護されたキーの証明書リクエストを作成します。
基本的に、openssl reqを次のように呼び出す必要があります。
openssl req -new ... -config ssl.conf -engine engine_name -keyform engine -key key_name
混乱したssl.conf
構成ファイルを作成する必要があります(少なくともPKCS#11の場合)。
openssl_conf = openssl_init
[openssl_init]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
dynamic_path = /usr/lib/ssl/engines/libpkcs11.so
MODULE_PATH = /usr/lib/opensc-pkcs11.so
また、特定のエンジンにkey_name
を指定する方法を理解する必要があります。 HSMモジュール用のOpenSSLエンジンがない場合は、運が悪いです。 :-(