私の最初の考えはopenssl s_client
のようなものを使用することでしたが、これはTCP UDPではなく)のみをサポートし、UDPを介したTLSを機能させるには特別な魔法が必要なようです。提示された証明書チェーンのダンプを取得しますか?(特に、証明書に関する情報ではなく、証明書が必要です)
私はたまたま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
クライアント呼び出しを見つけたいと思っていましたが、今のところ見つかりませんでした。お手数をおかけして申し訳ありませんが、時間を無駄にさせないような回答を書いておく価値はあります。
私は同じ問題に直面していましたが、特定の引数を指定して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
環境変数を処理するシェルスクリプトです。