web-dev-qa-db-ja.com

bashスクリプトのPKCS#12証明書を使用したcURL

pkcs12証明書が必須のWebサービスに接続する必要があります。アイデアは、bashスクリプトでcurlを使用することでした(具体的には、OS Xで)。

curlが通信でできないことの1つは、pkcs12証明書(.p12)を処理することです。私のオプションは何ですか?

私は証明書をPEM形式に変換することはうまくいくと読んだことがあります(opensslを使用)が、PEMを取得し、PKCS12証明書を要求するWebサービスと通信する必要があることをcurlに伝える方法がわかりません。

pkcs12をpemに変換することはこのように行われます(たとえば)、それは私にとってはうまくいきましたが、curlでうまく使用していません:

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

ヒントはありますか?または、カールの代替手段はありますか?ソリューションはコマンドラインベースでなければなりません。

32
svenson

あなたはすでに解決していると思いますが、私は同じ問題を抱えていました。ソリューションを共有するために答えます。

.p12ファイルがある場合、あなたのアプローチは正しいです。まず、証明書とキーをp12ファイルから分離して取得する必要があります。例として、mycert.p12ファイルを実行している場合

openssl pkcs12 -in mycert.p12 -out file.key.pem -nocerts -nodes
openssl pkcs12 -in mycert.p12 -out file.crt.pem -clcerts -nokeys

次に、URLを呼び出す必要があります。たとえば、特定のWebサービスのwsdlを取得すると仮定します

curl -E ./file.crt.pem --key ./file.key.pem https://myservice.com/service?wsdl

ファイルfile.crt.pemとfile.key.pemが作業フォルダーにある場合、「./」は必須です。

64
Smalltree1989

新しいカールがあるかどうかを確認します。新しいバージョンはPKCS12を完全に処理できます。

curl --cert-type P12 --cert cert.p12:password https://yoursite.com
7
bioffe