rau*_*uch 5 python sockets ssl certificate
我需要创建客户端/服务器应用程序以将文件从客户端发送到服务器.我使用简单的ssl套接字并使用证书进行身份验证.
ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = ssl.wrap_socket(ms,
keyfile=".../newCA/my_client.key",
certfile=".../newCA/my_client.crt",
server_side=0,
cert_reqs=ssl.CERT_REQUIRED,
ca_certs=".../newCA/CA/my-ca.crt"
)
ssl_sock.connect((HOST, MPORT))
Run Code Online (Sandbox Code Playgroud)
和服务器端:
msock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.ssl_sock = ssl.wrap_socket(msock,
keyfile=".../newCA/my_server.key",
certfile=".../newCA/my_server.crt",
server_side=1,
cert_reqs=ssl.CERT_REQUIRED,
ca_certs=".../newCA/CA/my-ca.crt"
)
self.ssl_sock.bind(('', self.PORT))
self.ssl_sock.listen(self.QUEUE_MAX)
Run Code Online (Sandbox Code Playgroud)
问题如下:当客户端尝试连接到服务器时,它需要输入两者的私钥密码:对于服务器端和客户端.
问题是我的Application:Client应该使用已经签名的证书,而Server也应该使用已签名的证书.我无法改变它.Serever和客户都是长期应用程序,所以我们只运行它,我们不需要寻找它们.但是,据我所知,Python没有提供自动输入私钥密码的标准方法.可能是其他建议?
小智 5
您也可以在 Python 中参考SSLSocket 密码短语/密码。删除服务器端情况下私钥文件的密码是有效的。OpenSSL 提供了工具来做到这一点。例如:
openssl pkey -in yourkey-with-pass.pem -out yourkey-without-pass.pem
密码短语旨在由人类输入作为识别手段。如果您想对其进行硬编码,没有密码短语的 SSL 密钥可提供相同级别的安全性。要摆脱密码短语,另请参阅:https://web.archive.org/web/20090116084124/http ://www.aleph-null.tv/article/20080714-1337-917.xml/Apache,- SSL,-和-“%3B删除密码”%3B