2 certificados SSL en trenzado

Yo tenía este código:

from twisted.web.server import Site from twisted.web.static import Data from twisted.internet import reactor, ssl root = Data("", "text/plain") site = Site(root) reactor.listenSSL(config.ws_port, site, ssl.DefaultOpenSSLContextFactory( '/etc/apache2/ssl/wc.key', '/etc/apache2/ssl/wc.crt') ) 

Pero tengo dominio adicional y otro certificado para ello. Necesito trabajar torcido con 2 certificados para cada dominio. ¿Cómo puedo agregar el segundo certificado para torcido?

La forma en que TLS funciona con HTTP para admitir múltiples nombres de host es mediante el uso de un solo certificado que contenga todos esos nombres de host (por ejemplo, como extensiones subjectAltName ) o mediante el uso de varios certificados (cada uno con menos del conjunto completo de nombres de host) y el SNI Extensión TLS.

Si desea utilizar la solución anterior, todo lo que necesita hacer es adquirir certificados construidos correctamente. La forma en que lo haga dependerá de dónde obtenga sus certificados. Quizás el proveedor de certificados tenga una interfaz de usuario especial para esto o quizás el generador de solicitud de certificado que está usando tenga opciones que lo controlen.

Si desea utilizar la última solución, investigue txSNI :

 from txsni.snimap import SNIMap from txsni.tlsendpoint import TLSEndpoint from twisted.web.server import Site from twisted.web.static import Data from twisted.internet import reactor from twisted.internet.ssl import Certificate, KeyPair, PrivateCertificate from twisted.internet.endpoints import serverFromString def main(reactor): root = Data("", "text/plain") site = Site(root) def load(key_path, cert_path): with open(key_path) as key_file: key = KeyPair.loadPEM(key_file.read()) with open(cert_path) as cert_file: cert = cert.read() return PrivateCertificate.fromCertificateAndKeyPair(cert, key) snimap = SNIMap({ "DEFAULT": load('/etc/apache2/ssl/wc.key', '/etc/apache2/ssl/wc.crt').options(), "another.host.name": load(another_key, another_cert).options(), ... }) endpoint = TLSEndpoint(serverFromString(reactor, "tcp:80")) endpoint.listen(site) reactor.run()