我有这个代码:
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')
)
但我有额外的域名和另一个证书。我需要为每个域使用 2 个证书。我如何为扭曲添加第二个证书?
TLS 与 HTTP 一起支持多个主机名的方式是使用包含所有这些主机名的单个证书(例如,subjectAltName
扩展)或使用多个证书(每个证书少于完整的主机名集)和 SNI TLS 扩展。
如果您想使用前一种解决方案,您所需要做的就是获取正确构建的证书。您如何执行此操作可能取决于您从何处获取证书。也许证书供应商为此有一个特殊的用户界面,或者您正在使用的证书请求生成器可能具有控制它的选项。
如果您想使用后一种解决方案,请调查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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)