web-dev-qa-db-ja.com

OpenVPNサーバーに接続し、接続時に提示された証明書チェーンをダンプするにはどうすればよいですか?

私の最初の考えはopenssl s_clientのようなものを使用することでしたが、これはTCP UDPではなく)のみをサポートし、UDPを介したTLSを機能させるには特別な魔法が必要なようです。提示された証明書チェーンのダンプを取得しますか?(特に、証明書に関する情報ではなく、証明書が必要です)

5
Shelvacu

私はたまたまOpenVPNサーバーをTCPモードで実行していて、あなたができないopenssl s_clientを使用して証明書を取得していることを確認できます。

[me@risby 17]$ openssl s_client -connect openvpn.example.com:1194
CONNECTED(00000003)
140413456672632:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 205 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

OpenVPNはSSLを使用していますが、標準のSSL/TLS接続とは異なる方法でSSLを使用していると思います。ですから、これが進むべき道ではないと思います。

証明書をダンプするopenvpnクライアント呼び出しを見つけたいと思っていましたが、今のところ見つかりませんでした。お手数をおかけして申し訳ありませんが、時間を無駄にさせないような回答を書いておく価値はあります。

4
MadHatter

私は同じ問題に直面していましたが、特定の引数を指定してopenvpnを使用することで解決できます。重要なのは--tls-verify--tls-export-certです。 --tls-verifyの後には、実行するスクリプトのファイル名が必要です。環境変数peer_certには、ダンプされた証明書チェーンの場所が含まれます。 --tls-export-certの後には、証明書がダンプされるディレクトリ名を続ける必要があります。 tls-verifyスクリプトが終了すると、証明書は自動的に削除されます。

私が見つけた唯一の問題は、すでにCA証明書を持っている必要があるということでした。あなたがそれを持っていない場合、スクリプトは実行されず、私はそれを回避する方法を見つけられませんでした。

使用例:

openvpn --remote remote.Host.to.check 1194 --dev tun --proto udp --ca tmp/openvpnca.cert --client --auth-user-pass tmp/noauth.txt --remote-cert-tls server --tls-verify tmp/tls-verify.sh --script-security 2 --tls-export-cert tmp/tlsverifies

tmp/noauth.txtは、偽のユーザー名/パスワードを含む2行のダミーファイルです。 tmp/tlsverifiesは、チェーンファイルがダンプされるディレクトリです。 tmp/tls-verify.shは、peer_cert環境変数を処理するシェルスクリプトです。

0
Peter Šurda