web-dev-qa-db-ja.com

curl -with --certを使用する

私はcUrlを使用して、企業のWebサイトからデータを要求しました。企業から送信された.cer証明書を使用しています。これはコマンドです:

cUrl --header "Content-Type: text/xml;charset=UTF-8" \
     --data @bustaRequestISEE2015ConsultazioneAttestazione.xml \
     -o bustaResponseISEE2015ConsultazioneAttestazione.xml \
     --cert ./caaffabisrl.cer \
     https://istitutonazionaleprevidenzasociale.spcoop.gov.it/PD

実行すると、次のエラーメッセージが表示されます。

curl:(58)PEMクライアント証明書を読み込めませんでした、OpenSSLエラーエラー:0906D06C:PEMルーチン:PEM_read_bio:開始行がありません(キーが見つからない、パスフレーズが間違っている、またはファイル形式が間違っていますか?)

私を助けることができる誰かがいますか?

Tks、クリスティアーノ。

5

クライアントの秘密鍵なしで、クライアント証明書のみを使用してcurlでTLSサーバーに接続することはできません。彼らはあなたに秘密鍵ファイルを送るのを忘れたか、またはあなたが送ったのはクライアント証明書ではなく検証のためのサーバー証明書でした。

最初に試すのは、--cacertではなく--certを使用することです。つまり、これがserver's証明書であることをcurlに伝え、curlは、サーバーが本人であるかどうかを確認するために使用できます。

--certを削除して--cacertを使用しないこともできます。サーバーが信頼されていないというエラーが表示される可能性があります。次に、--insecure引数を追加し、それが機能するかどうかを確認します。あなたが誰と話しているのかの証拠がないので、私はその議論を守りません。

私の推測では、これはサーバー証明書であり、--cacertの代わりに--certを使用すると問題が解決されると思います。

5
Jim Flood

私の推測では、証明書ファイルはbase-64エンコードされた証明書ではなく、DERエンコードされたバイナリー証明書です。バイナリからbase-64に変換するには、OpenSSLを使用できます。

openssl x509 -inform der -in certificate.cer -out certificate.pem

私は常にすべての議論を忘れており、次のサイトにブックマークを付けています。これは、ほとんどすべての証明書形式を変換する方法の例を示しているためです。 https://www.sslshopper.com/ssl-converter.html

2
kah608