我正尝试使用python创建套接字连接。在Python中验证对端
这里是我的Python代码...
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.settimeout(config['timeout'])
self.socket.connect((config['host'], config['port']))
self.ssl = ssl.wrap_socket(
self.socket,
certfile=config['certificate'],
keyfile=config['key']
)
远程服务器的证书似乎是自签名或信任存储缺少它没有工作。我是新来的python,并不知道如何禁用python中的verify_peer,所以连接可以工作。
我有工作在PHP代码...
$context = stream_context_create([
'ssl' => [
'verify_peer' => false,
'local_cert' => $config['certificate'],
'local_pk' => $config['key']
]
]);
$socket = stream_socket_client(
'ssl://secure.test.com:700',
$errno, $errstr, $config['timeout'],
STREAM_CLIENT_CONNECT, $context
);
设置'verify_peer' => false
有助于建立连接。我如何在Python中做类似的事情?
OpenSSL的调试
openssl s_client -connect secure.test.com:700
verify error:num=20:unable to get local issuer certificate
verify return:1
verify error:num=21:unable to verify the first certificate
verify return:1
请帮助和建议。谢谢
*“设置'verify_peer => FALSE'有助于确立连接。我如何在python中做类似的事情?“ - 非常糟糕的主意;请参阅[世界上最危险的代码:在非浏览器软件中验证SSL证书](http://crypto.stanford.edu/~dabo/pubs/abstracts/ssl-client-bugs.html)。 – jww
*“它不起作用,因为远程服务器的证书似乎是自签名的或从信任存储库中丢失...” - - 这是什么?用例影响答案。请发布您用于连接服务器的URL,并发布'openssl s_client -connect: -tls1 -servername | openssl x509 -text -noout'。点击*编辑*(不要将其作为评论发布),将其添加到您的问题中。否则,我们无法复制它,并且没有足够的信息来帮助排除故障。 –
jww
@jww感谢您的帮助。我已经编辑了更多细节的问题。我得到这个错误:'验证错误:num = 20:无法获得本地颁发者证书'已经尝试通过Linux命令重新获取当前证书'openssl s_client -connect secure.test.com:700:' – seoppc