Мне нужно создать приложение клиент / сервер для отправки файлов с клиентов на сервер.
Я использую простые сокеты 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)
Проблема заключается в следующем: когда клиент пытается подключиться к серверу, он требует ввести пароль для закрытого ключа для обоих: для стороны сервера и для стороны клиента.
- В Java нам нужно установить системное свойство: javax.net.ssl.keyStorePassword = "", и оно должно использоваться автоматически, но как оно используется в Python? Я не могу вводить фразу-пароль все время, когда клиент подключается.
Проблема в том, что мое приложение: клиент должен использовать уже подписанный сертификат, а сервер должен использовать уже подписанный сертификат. Я не могу это изменить. И Serever, и Clients являются долгоживущими приложениями, поэтому мы просто запускаем их, и нам не нужно их искать. Но, как я понимаю, Python не предоставляет стандартного способа автоматического ввода пароля для закрытого ключа. Могут быть другие предложения?