Wgetまたは他のコマンドを使用して、たとえば https://www.google.com からssl証明書をダウンロードしたい。 UNIXコマンドラインはありますか? wgetまたはopenssl?
答えを見つけました。 opensslが提供します。
openssl s_client -connect $ {REMHOST}:$ {REMPORT}
証明書をダウンロードするには、opensslに組み込まれているクライアントを次のように使用する必要があります。
echo -n | openssl s_client -connect Host:PORTNUMBER \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert
これにより、証明書が/tmp/$SERVERNAME.cert
に保存されます。
チェーン内のすべての証明書をダウンロードする場合は、-showcerts
を使用できます。ただし、サーバー証明書をダウンロードするだけの場合は、-showcerts
を指定する必要はありません。
echo -n
はサーバーに応答を返すため、接続が解放されます
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
は、証明書チェーンと接続の詳細に関する情報を削除します。これは、証明書を他のキーストアにインポートするための推奨フォーマットです。
[〜#〜] gnutls [〜#〜] クライアントツール、gnutls-cli
、これも簡単にできます:
gnutls-cli --print-cert www.example.com \
< /dev/null \
> www.example.com.certs
プログラムはサイトにインタラクティブなクライアントを提供するように設計されているため、空の入力(この例では/dev/null
)インタラクティブセッションを終了します。
true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509
opensslのこのモードはstdinを想定しているため、true |
を介して提供します。これは、-connectパラメーターで指定されたサーバーに接続します。 2>/dev/null
はエラーを抑制します(オプション)。出力全体をx509パーサーに渡し、/dev/stdin
を指定してシェルパイプを入力ファイルとして使用できます。そして、それは-----BEGIN CERTIFICATE-----
出力の-----END CERTIFICATE-----
からs_client
の部分だけを出力します。コマンドの最後に> google.com.pem
を追加することで、ファイルにリダイレクトできます。
私が知る限り、これは証明書チェーンを検証せず、エンドサーバーが提供するssl IDのみを通知します。
@bignoseの回答に基づいて、ここに自己完結型バージョンがあります。シェフのレシピ:
Sudo apt-get install gnutls-bin
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
Sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
Sudo update-ca-certificates
Exとプロセス置換を使用した代替構文:
ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt