Jean-Paul Calderone의 조언에 이어 여기에 ssl.ClientCertificateOptions 사용을 지원하도록 뒤틀린 "starttls_server"샘플을 수정하려고합니다. http://twistedmatrix.com/documents/14.0.0/api/twisted.internet.ssl.CertificateOptions.htmlTwisted Python, 일반 텍스트에서 보안 연결로 전환 할 때 ssl.CertificateOptions 사용
from twisted.internet import ssl, protocol, defer, task, endpoints
from twisted.protocols.basic import LineReceiver
from twisted.python.modules import getModule
class TLSServer(LineReceiver):
def lineReceived(self, line):
print("received: " + line)
if line == "STARTTLS":
print("-- Switching to TLS")
self.sendLine('READY')
self.transport.startTLS(self.factory.options)
def main(reactor):
certData = getModule(__name__).filePath.sibling('server.pem').getContent()
cert = ssl.PrivateCertificate.loadPEM(certData)
factory = protocol.Factory.forProtocol(TLSServer)
factory.options = cert.options()
endpoint = endpoints.TCP4ServerEndpoint(reactor, 8000)
endpoint.listen(factory)
return defer.Deferred()
if __name__ == '__main__':
import starttls_server
task.react(starttls_server.main)
당 내 이해가 해당 파일을 읽은 나는 효과적으로 certopts = ssl.CertificateOptions(privateKey=pKeyData, certificate=certData, trustRoot=caCertsData)
(같은 것을 함께 cert = ssl.PrivateCertificate...
및 cert.options = ssl.PrivateCertificate....
라인을 교체해야한다는 것입니다으로, 내 개인 키, 인증서 및 신뢰할 수있는 루트를 지정할 수 있도록 in certData, caCertsData 및 pKeyData)를 입력 한 다음 factory.options
에 전달 - pasti는 제외 내가 시도한 코드의 모든 변종에 대해서는 아직 제대로 이해하지 못했다. 내 노력으로 고전적인 "OpenSSL.crypto.Error : []"의 다양한 결과가 생겼다. PEM 파일을 화면에 표시하고 종료합니다!
누구든지 나를 계몽시킬 수 있습니까? 고마워요.
안녕하세요 @ 글리프, 다시 한 번 고맙습니다. 그래서 내 서버가'factory.options = ssl.CertificateOptions (privateKey = pKeyData, certificate = certData, trustRoot = caCert)'로 실행되고있다. 그러나 exceptions.TypeError : cert가있는 서버 오류는 X509 인스턴스 여야합니다. - 클라이언트가 cert의 pem 복사본을 제공합니다. 여기에 내게 계몽 할 수 있습니까? 아니면 새로운 질문으로 제기하는 것이 더 의미가 있습니까? ! –
인증서를 'CertificateOptions'에 pyOpenSSL X509 인스턴스로 전달하는지 확인하십시오. Twisted의'PrivateCertificate '유형이 아닙니다. –
안녕하세요 @ Jean-PaulCalderone ... filePath.sibling을 사용하여 파일에서 3 개의 매개 변수를 읽습니다. ('xxxxx'). getContent(). caCert는 'BEGIN CERTIFICATE [데이터] END CERTIFICATE'가있는 PEM이며 certData는 동일하지만'RSA 프라이 머리 키 [데이터] END RSA 프라이 머리 키 '와 동일합니다. (예상했던대로) 다른 것입니다.'Private-Key (1024 비트)/모듈/[16 진수 stuff]/publicExponent : 65537 (.... 등)'. 이게 맞지 않아? 나는이 세 가지 매개 변수에 대한 [비공개] 인증서를 전혀 사용하지 않습니다. –