在文件所需输入中使用带有文件内容的字符串

时间:2015-05-21 08:32:16

标签: python python-2.7 ssl

import socket, os
from SocketServer import BaseServer
from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
import ssl

class SecureHTTPServer(HTTPServer):

    def __init__(self, server_address, HandlerClass):
        BaseServer.__init__(self, server_address, HandlerClass)

        self.socket = ssl.SSLSocket(
            socket.socket(self.address_family, self.socket_type),
            keyfile = 'path\\server.key',
            certfile = 'path\\server.crt'
        )

        self.server_bind()
        self.server_activate()

class SecureHTTPRequestHandler(SimpleHTTPRequestHandler):  

    def do_GET(self):
        #Here process response

def startServer(HandlerClass = SecureHTTPRequestHandler,
         ServerClass = SecureHTTPServer):

    server_address = ('', 8880) 
    httpd = ServerClass(server_address, HandlerClass)
    sa = httpd.socket.getsockname()
    print "Serving HTTPS on", sa[0], "port", sa[1], "..."
    httpd.serve_forever()

class MainServer:   

    def __init__(self): 
        #All starts here    
        startServer()

我有这段代码来启动web服务器ssl,实际代码从系统路径获取证书和密钥,但为了安全性我想将密钥和证书存储在String中,我想解析构造函数来自不使用临时文件的字符串。

server = "Server cert here ******"    
key = "Server key here ******"

如何在第一段代码上使用这些变量?

1 个答案:

答案 0 :(得分:3)

检查ssl.py证书的来源是否使用SSLContext.load_cert_chain()从SSL上下文加载,文档说明该路径需要指向密钥文件和证书文件的路径。我没有看到任何方法,以便可以传递字符串或类似文件的对象。

引用的代码来自Python 2.7.9,其中包含来自Python 3.4的ssl模块的反向端口,但对于早期的2.7.x版本,情况相同。

您可以使用临时文件,但不是您想要的。你可以使用命名管道,但那会很混乱。

但是,既然你正在分发服务器,我想知道为什么你需要这样做。为什么不让您的用户生成并安装服务器的证书和密钥?可以自签名,但如果需要,可以由官方CA签署。