2010-06-24 1 views
2

나는 개인 키와 httplib.HTTPSConnection를 사용 파이썬 httplib.HTTPSConnection과 암호

h = httplib.HTTPSConnection(url, key_file='../cert/priv.pem', cert_file='../cert/srv_test.crt') 

그럼 내가 그 개인 키에 암호를 입력하도록 요청하고있다. 사용자 입력 (콘솔)이 아닌 다른 소스 (코드, 환경)에서 암호를 입력하는 옵션이 있습니까? 자바와 같은 아마 뭔가 :

개인 키 파일이 파이썬의 _ssl 모듈 (C로 작성 부분)에로드
-Djavax.net.ssl.keyStorePassword=my_secret_passwd 
+0

다음과 같은 일반적인 구문을 사용하여 URL에 패스를 포함 시키려고 했습니까? 'service : // username : password @ hostname : portnumber/filepath' ? –

+0

kai1968 :이 암호는 웹 사이트가 아니지만 개인 키를 보호합니다. –

답변

4

. _ssl.c에서 333 행 :

ret = SSL_CTX_use_PrivateKey_file(self->ctx, key_file, SSL_FILETYPE_PEM); 

이것은 주어진 키 파일을로드하는 OpenSSL 기능입니다. 암호가 제공되면 암호 콜백 기능이 호출됩니다. 이 함수는 기본적으로 사용자에게 묻기 때문에 SSL_CTX_set_default_passwd_cb_userdata을 사용하여 재정의해야합니다. 불행하게도이 함수는 표준 라이브러리 나 M2Crypto (Python OpenSSL wrapper)에 포함되어 있지 않지만, pyopenssl에서 찾을 수 있습니다.

암호로 보호 된 키 파일에서 소켓을 생성하기 위해, 당신은 같은 것을해야 할 것 :

from OpenSSL import SSL 
ctx = SSL.Context(SSL.SSLv23_METHOD) 
ctx.set_passwd_cb(lambda *unused: "yourpassword") 
ctx.use_privatekey_file(keyFilename) 
ctx.use_certificate_file(certFilename) 
someSocket = SSL.Connection(ctx, socket.socket()) 

가 HTTPS 연결을 생성하는 것은 조금 더 열심히 내가 할 방법을 모른다 그것은 pyopenssl과 함께 있지만 pyopenssl의 소스 코드 (test_ssl.py:242)에 예제가 있습니다.

+0

감사! 클라이언트를 httplib.HTTPSConnection에서 SSL 지원을 사용하는 간단한 소켓 클라이언트로 변경했습니다. –