클라이언트 인증서 파일을 p12 (PKCS12) 형식으로 사용하여 치료와 함께 웹 서버에 연결해야합니다. 그렇게 할 수있는 방법이 있습니까?Scrap과 함께 ssl client certificate (p12)를 사용하는 방법?
6
A
답변
7
여기서는 테스트되고 완벽한 솔루션을 제공 할 수는 없지만 일부 조정을 통해 필요한 것을 제공 할 수있는 몇 가지 장소를 알고 있습니다.
출발점은 SSL/TLS 구성을 정의하는 scrapy의 ContextFactory
개체입니다. 표준 구현 ScrapyClientContextFactory
은 클라이언트 인증서를 사용하지 않으며 서버 인증서 확인도하지 않으며 모든 인증서를 수락합니다. (More details)
그러나 source code을 보면 BrowserLikeContextFactory
대안이 optionsForClientTLS 개체를 만드는 것으로 나타납니다.
이 개체는 clientCertificate
매개 변수를 사용하여 서버에 인증 할 수도 있습니다.
@implementer(IPolicyForHTTPS)
class ClientCertContextFactory(BrowserLikeContextFactory):
def creatorForNetloc(self, hostname, port):
with open('yourcert.pem') as keyAndCert:
myClientCert = twisted.internet.ssl.PrivateCertificate.load(keyAndCert.read())
return optionsForClientTLS(hostname.decode("ascii"),
trustRoot=platformTrust(),
clientCertificate=myClientCert,
extraCertificateOptions={
'method': self._ssl_method,
})
컨텍스트를 활성화 : (Details)
그래서 이론적으로는, BrowserLikeContextFactory
를 서브 클래스 자신이 creatorForNetloc
메소드를 작성하고도 요지에서 clientCertificate
이 그 optionsForClientTLS
를 작성해야 공장 settings.py :
DOWNLOADER_CLIENTCONTEXTFACTORY = 'your.package.ClientCertContextFactory'
에 따르면
openssl pkcs12 -in client_ssl.pfx -out client_ssl.pem -clcerts
(Converting pfx to pem using openssl에서 차용)
업데이트 PKCS12 파일 변환 : 워드 프로세서에 twisted.internet.ssl.PrivateCertificate
는 부하 PEM 또는 ASN.1 형식 키, SI 당신은 PEM 형식으로 키를 변환해야합니다 수 있습니다 p12 형식 :
openssl pkcs12 -in client_cert.p12 -out client_cert.pem -clcerts