Linux OS 上のクライアントとサーバー間のハンドシェイク フェーズ中に、ライブ ネットワーク トラフィックから X.509 証明書を自動的に抽出する方法を教えていただければ幸いです。
同様の質問がかなり前にもなされた。ネットワークまたはpcapファイルからSSL証明書を抽出するしかし、答えは不完全でした。
答えは次のコマンドを使うと言っている
ssldump -Nr file.pcap | awk 'BEGIN {c=0;} { if ($0 ~ /^[ ]+Certificate$/) {c=1; print "========================================";} if ($0 !~ /^ +/ ) {c=0;} if (c==1) print $0; }'
ただし、pcap ファイルが関係しているため、証明書を手動で抽出する必要があります。
上記のコマンドを私の要件に合わせて変更したり、同じことを実行するための他の代替方法を提案したりできる方はいらっしゃいますか。
答え1
パケット キャプチャから具体的に抽出しようとしているのか、それともハンドシェイク中にコマンド ラインから証明書を取得しようとしているのか?
証明書自体を取得する必要がある場合は、次の操作を実行できます。
echo | openssl s_client -connect sub.domain.tld:443 | openssl x509 -noout -text
にパイプせずにコマンドを実行するとopenssl
、証明書に関するさらに多くの詳細が表示されますが、2 番目のopenssl
コマンドは証明書自体を抽出します。
echo
OpenSSL シェルが正常に終了して Bash プロンプトに戻るためには、パイプが必要です。
当然、これによってすべてが STDOUT に書き込まれます。証明書を保存する場合は、コマンドを で終了してファイルにリダイレクトする必要があります> filename.crt
。証明書チェーンにエラーがある場合は、ファイルには書き込まれず、代わりに STDERR に書き込まれます。