She*_*acu 8 openvpn ssl-certificate tls
我的第一个想法是使用类似的东西,openssl s_client
但这只支持 TCP 而不是 UDP,似乎需要一些特殊的魔法才能让 TLS over UDP 工作,我如何与之交互并获得证书链的转储?(我特别需要证书,而不是有关它们的信息)
建立在Peter \xc5\xa0urda 的这个线程中最完整的解决方案的基础上(请参阅那里有关所使用openvpn
选项的一些解释),这应该可以完成获取服务器证书的工作。
我假设您有一个有效的 OVPN 配置文件,并且config.ovpn
您正在使用用户名和密码对客户端进行身份验证(这可以省略,具体取决于您的设置)。
准备工作目录:
\nWD=/tmp/openvpn-cert\nmkdir $WD\n
Run Code Online (Sandbox Code Playgroud)\n准备脚本来提取服务器证书和一些伪造的凭据文件(我们不需要成功通过身份验证):
\necho -e \'#!\'"/bin/sh\\ncp \\$peer_cert $WD/server-cert-\\$1.pem" >$WD/extract-cert.sh\nchmod +x $WD/extract-cert.sh\n\necho -e "fakeusername\\nfakepassword" >$WD/creds.dat\n
Run Code Online (Sandbox Code Playgroud)\n尝试连接openvpn
:
openvpn --config config.ovpn --auth-user-pass $WD/creds.dat --tls-export-cert $WD \\\n --script-security 2 --tls-verify $WD/extract-cert.sh --log /dev/null\n
Run Code Online (Sandbox Code Playgroud)\n现在您应该拥有可用的服务器证书$WD/server-cert-0.pem
并且可以对其进行操作,例如获取notBefore和notAfter日期:
openssl x509 -in $WD/server-cert-0.pem -noout -dates\n
Run Code Online (Sandbox Code Playgroud)\n链中的其他证书将在 etc 中可用。$WD/server-cert-1.pem
该数字来自传递给 的第一个参数extract-cert.sh
,即证书深度。请参阅手册页的脚本挂钩部分--tls-verify
中的文档。
我碰巧在 TCP 模式下运行 OpenVPN 服务器,我可以确认您无法使用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
---
Run Code Online (Sandbox Code Playgroud)
我只能推测,虽然 OpenVPN 使用 SSL,但它的实现方式与标准 SSL/TLS 连接不同。所以我认为这不是要走的路。
我希望找到一个openvpn
可以转储证书的客户端调用,但到目前为止还没有。很抱歉没有为您提供更多信息,但我认为值得写一个答案,这样可以防止您浪费时间。
归档时间: |
|
查看次数: |
6932 次 |
最近记录: |