Opensslコマンドラインのトラブル
-
22-07-2019 - |
質問
編集:私の問題は解決していませんが、新しくて刺激的な問題に移りました。
将来、この質問につまずく人を助けるだろう誰かが持っていて洞察力があるなら、これをここに残してください。
こんにちは、 暗号化されたメールをphpからoutlookに送信しようとしています。そのため、Outlookにインポートする証明書を生成する必要があります。 opensslとそれに付属するCA.plスクリプトを使用して一連のキーを生成するのに問題はありませんでしたが、OutlookにインポートするPKCS12ファイルを生成するコマンドを実行しようとすると、" demoCA"ディレクトリ。このディレクトリはopensslの一部であり、openssl config ...で参照されているようですが、どこにあるかわかりません。私はgrepからスポットライト(os xでは、スポットライトが何かを見つけることを本当に期待していなかったが)に至るまで、さまざまな方法でドライブを検索しましたが、何も思いつきません。
実行しようとしたコマンドは次のとおりです。
$ openssl ca -cert newcert.pem -ss_cert newcert.pem
Using configuration from /sw/etc/ssl/openssl.cnf
./demoCA/private/cakey.pem: No such file or directory trying to load CA private key
19918:error:02001002:system library:fopen:No such file or directory:bss_file.c:245:fopen('./demoCA/private/cakey.pem','r')
19918:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:247:
暗号化/ SSLに関しては少し知識がないので、バカなものを見逃しているかもしれません(確かに、笑)。
解決
提供されたスクリプトを使用して、新しいCAを作成する必要があります。これは、すべてのopensslオプションを処理するよりも簡単です。これは、Windows自体の内部でCygwinにバンドルされたopensslの手段として実行するか、お気に入りのUnixディストリビューションを使用することができます。 bashスクリプトを使用してそれを行う方法を示します(ただし、perlスクリプトは同じである必要があります)。
$ ./CA.sh -newca
これにより、CA証明書が含まれるdemoCAディレクトリが作成されます。上記のコマンドを呼び出すと、CA証明書(CN、OUなど)およびCA秘密キーパスフレーズのフィールドに関するプロンプトが表示されます。
これで、証明書リクエストまたは証明書リクエストから証明書を作成できます。
$ ./CA.sh -newreq
これにより、生成された秘密キーを暗号化するための新しい証明書要求フィールドとパスフレーズの入力が求められます。デフォルトでは、要求はCA.sh(newreq.pem)と同じディレクトリに残されます。持っている電子メールアドレスをCN(Common Name)として使用することが重要です。
これで、署名するだけで証明書が完成しました。
$ ./CA.sh -sign
これにより、署名済み証明書要求であるnewcert.pemが生成されます。証明書があります。MicrosoftCSPが認識するPFXまたはP12ファイル内に証明書と秘密キーをパックするだけです。
次に、newreq.pemとnewcert.pemの内容をファイルにコピーします。
$ cat newreq.pem > keypair.pem
$ cat newcert.pem >> keypair.pem
そして、opensslシェルを使用してP12ファイルを生成します(今回はスクリプトの助けはありません)。リクエストが生成されたときに使用したパスフレーズとエクスポートパスワード(p12ファイル内のプライベートキーを暗号化するため)の入力を求められます。
$ openssl pkcs12 -export -in keypair.pem -out mykeypair.p12
Enter pass phrase for keypair.pem:
Enter Export Password:
Verifying - Enter Export Password:
Etvoilà。 Windowsでダブルクリックしてキーストアにインポートし、メール署名証明書として使用できるPKCS#12ファイルがあります(デフォルトのオプションで十分か、作成時に追加の属性を指定する必要があるか覚えていませんOutlookが電子メール署名証明書として認識できるようにする証明書)。また、CA証明書を信頼できるCAとしてインポートする必要があります(cacert.pemをdemoCAディレクトリ内のcacert.cerにコピーし、ダブルクリックしてインポートします)。