comp.lang.python에 연락하여이 문제와 관련된 아이디어가 있는지 확인했습니다. 나는 메일 링리스트에 아무런 응답을받지 못했기 때문에 여기로 도달하기로 결정했다.Python M2Crypto.SSL.Checker.NoCertificate 예외
나는 M2Crypto 모듈과 이상한 버크가 있는데 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다. 나는 동료와 협력하여 표준 도구를 통해 얻은 IPv4 주소 목록에서 SSL 인증서를 확인하는 내부 도구를 개발하고 있습니다.
우리는 M2Crypto를 사용하여 인증서의 유효성을 검사합니다. 하나의 IPv4 주소 만 확인하면 올바른 인증서를 제공 할 수 있으며 SSL 인증서에 포함 된 정보에 대한 유효성 검사를 수행 할 수 있습니다.
그러나 여러 개의 IPv4 주소를 확인하려고하면 "M2Crypto.SSL.Checker.NoCertificate"가 수신됩니다. 우리가 이것을 받아야 할 경우가 있습니다. 그러나 두 번째 또는 세 번째 IPv4 주소가 무엇이든 관계없이 (첫 번째로 양호한 것으로 테스트 된 경우에도) 실패합니다.
컨텍스트 생성 :
global context
context = M2Crypto.SSL.Context()
if sys.platform.startswith('linux'):
context.load_verify_info(capath="/etc/ssl/certs/")
elif sys.platform.startswith('darwin'):
context.load_verify_info(cafile=certfile)
else:
print "Unknown platform, bail!"
exit(1)
context.set_allow_unknown_ca(True)
context.set_verify(M2Crypto.SSL.verify_none,9)
소켓의 작성 : 코드
conn = M2Crypto.SSL.Connection(context)
socket.setdefaulttimeout(2.0)
conn.set_socket_read_timeout(M2Crypto.SSL.timeout(sec=2))
conn.set_socket_write_timeout(M2Crypto.SSL.timeout(sec=2))
try:
conn.connect((ip,443))
# we can the catch the exception here, but it shouldn't be failing
상기 두 부분은 자신의 기능에 존재한다. 컨텍스트는 모든 연결에 전역 적으로 사용되므로 컨텍스트 생성은 한 번만 호출됩니다. 처음에는 이것이 문제일지도 모른다고 생각하고 변경없이 각 루프에서 컨텍스트를 만들도록 시도했습니다.
후자의 블록은 주소 배열을 통해 루프의 일부로 호출됩니다. IP는 호출자로부터 전달됩니다.
- 팀
- 팀./etc/ssl/certs의 '.pem'파일을 사용하여 신뢰할 수있는 CA를 판별 한 후 이들에 대해 유효성을 검사합니다. 데비안에서 파생 된 배포판에는 '/ etc/ssl/certs'에 여러 개의 .pem 파일이 있습니다. Mac OS X 시스템에서도 Mozilla의 신뢰할 수있는 CA에서 생성 된 단일 파일을 사용하여 동일한 문제가 발생합니다. – theckman
Python ssl 라이브러리는 OpenSSL 위에 구축되었습니다. 수동으로 인증서를 확인하여 인증서 저장소가 올바르게 구성되었는지 확인하십시오./etc/ssl/certs가 올바르게 작동하는 것은 어려운 일일 수 있습니다. "OpenSSL 확인"을 사용하여 인증서를 확인할 수 있습니다. http://www.madboa.com/geek/openssl/#verify-standard – user590028
인증서 저장소는 여기에서 문제가되지 않습니다. 하나의 IP를 검사 할 때 제대로 검증됩니다. 그것은 연결하고 우리의 유효성 체크가 작동합니다. 후속 호스트에서 인증서를 가져 오기 위해 연결할 때 NoCertificate 예외가 발생합니다. 연결하는 동안 서버에서 인증서를받지 못한다고 생각하게됩니다. OpenSSL은 또한 상점이 유효한지 확인합니다. 추적 기록 : http://paste.pocoo.org/show/575594/ – theckman