사용자 지정 CA에서 인증서에 서명했는지 확인해야합니다.어떻게 파이썬에서 SSL 인증서를 확인합니까?
# Custom CA file: ca-cert.pem
# Cert signed by above CA: bob.cert
$ openssl verify -CAfile test-ca-cert.pem bob.cert
bob.cert: OK
하지만 파이썬에서 같은 일을해야하고, 정말 명령 줄 유틸리티를 호출하고 싶지 않은 : OpenSSL을 명령 줄 유틸리티를 사용하여이 쉽게 할 수 있습니다. 내가 아는 한, M2Crypto는 OpenSSL을위한 "가장 완벽한"파이썬 래퍼이지만 커맨드 라인 유틸리티의 수행 방법을 이해할 수는 없습니다!
C 코드에서이 동일한 작업을 수행하는 방법을 나타내는 this question을 참조하면 약 절반 정도를 얻을 수있었습니다. 내가 선택한 변수 이름은 openssl verify 명령 줄 유틸리티의 소스 코드에서 사용 된 것과 동일합니다 (openssl-xxx/apps/verify.c
참조).
import M2Crypto as m2
# Load the certificates
cacert = m2.X509.load_cert('test-ca-cert.pem') # Create cert object from CA cert file
bobcert = m2.X509.load_cert('bob.cert') # Create cert object from Bob's cert file
cert_ctx = m2.X509.X509_Store() # Step 1 from referenced C code steps
csc = m2.X509.X509_Store_Context(cert_ctx) # Step 2 & 5
cert_ctx.add_cert(cacert) # Step 3
cert_ctx.add_cert(bobcert) # ditto
# Skip step 4 (no CRLs to add)
# Step 5 is combined with step 2...I think. (X509_STORE_CTX_init: Python creates and
# initialises an object in the same step)
# Skip step 6? (can't find anything corresponding to
# X509_STORE_CTX_set_purpose, not sure if we need to anyway???)
#
# It all falls apart at this point, as steps 7 and 8 don't have any corresponding
# functions in M2Crypto -- I even grepped the entire source code of M2Crypto, and
# neither of the following functions are present in it:
# Step 7: X509_STORE_CTX_set_cert - Tell the context which certificate to validate.
# Step 8: X509_verify_cert - Finally, validate it
그래서 나는 절반이,하지만 난 실제로 검증이 완료 얻을 수없는 것! 내가 놓친 게 있니? M2Crypto에서 사용해야하는 다른 기능이 있습니까? OpenSSL의 완전히 다른 파이썬 래퍼를 찾고 있을까요? 어떻게하면 파이썬에서이 작업을 수행 할 수 있습니다!?!?
필자는 파일을 암호화/해독하기 위해 인증서를 사용하고 있으므로 SSL 연결이 없으므로 (SSL 연결 기반 피어 인증서 확인을 사용하는 데는 already been answered) 사용하고 싶지 않습니다. 진행.
커맨드 라인 유틸리티를 호출하고 싶지 않은 이유가 있습니까? 당신이 두통을 피할 수 없을 것 같습니다 ... – katrielalex
이것은 잠재적으로 임베디드 시스템을 포함하여 새롭거나 오래된, 크고 작은 많은 다른 운영 체제에 배포 될 소프트웨어 용입니다 (파이썬을 포함 할만큼 충분히 큼)). 최대한의 이식성과 최대의 성능을 원합니다. 필자가 피할 수 있다면 수천 개의 전화를 명령 줄에 넣고 싶지는 않습니다.많은 수의 인증서가 필요합니다. – Nathan
관련 http://stackoverflow.com/q/2626792/4279 – jfs