我需要创建客户机/服务器应用程序来将文件从客户机发送到服务器。 为此,我使用简单的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))
服务器端:
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)
问题如下:当客户端尝试连接到服务器时,它需要为私钥输入密码短语:对于服务器端和客户端。
问题是我的应用程序:客户端应该使用已签名的证书,服务器也应该使用已签名的证书。我不能改变它。Serever和客户机都是长寿命的应用程序,所以我们只运行它,不需要寻找它们。但是,据我所知,Python不提供statndard方法来自动为私钥输入密码短语。可能还有其他建议?
你也可以参考SSLSocket passphrase/password in Python。删除服务器端案例的私钥文件的密码短语是有效的。OpenSSL提供了这样做的实用程序。 例如:
openssl pkey -in yourkey-with-pass.pem -out yourkey-without-pass.pem
以下是我从这篇文章中获得灵感后找到的解决方案:
Creating a Python requests session using a passphrase protected Client side Cert
通行短语是指由人输入作为识别的手段。如果要硬编码,则不带密码短语的SSL密钥提供相同级别的安全性。 要删除密码短语,请参见:http://aleph-null.tv/article/20080714-1337-917.xml/Apache,-SSL,-and-"%3BGetting-Rid-of-the-Passphrase"%3B
相关问题 更多 >
编程相关推荐