簡體   English   中英

ssl 證書文件在 Python websocket 服務器中的路徑

[英]Where to give path of ssl certificate files in Python websocket server

我有這個片段來自: https://websockets.readthedocs.io/en/stable/intro.html

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
localhost_pem = pathlib.Path(__file__).with_name("localhost.pem")
ssl_context.load_verify_locations(localhost_pem)

我有 CA 簽名證書,其中包含密鑰、證書和捆綁文件。 在哪里指定它們?

在我的實際代碼中,看起來所有瀏覽器都報告無效證書問題:

def start_server():
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
    localhost_pem = pathlib.Path(__file__).with_name("server.pem")
    ssl_context.load_cert_chain(localhost_pem)

    ip = ''

    if os.name =='nt':
        ip = '127.0.0.1'
    else:
        ip = "x.x.x.x"

    start_server = websockets.serve(
        hello, ip, 31333,ssl=ssl_context
    )

    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()

例如,我創建了一個 Python 網絡服務器並正確指定了這些文件,並且它工作正常並且沒有出現無效的證書問題:

server = HTTPServer(('0.0.0.0', 443), PostHandler)
    if USE_HTTPS:
        import ssl
        server.socket = ssl.wrap_socket(server.socket, keyfile='./ssl/key.pem', certfile='./ssl/public.pem'
                , ca_certs="./ssl/cap1_traf_com.ca-bundle" , server_side=True)

        server.serve_forever()
 

大多數庫,包括websockets都接受 ssl 上下文參數。

在您的情況下,對於服務器端,您希望這樣創建套接字:

import ssl
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
ssl_context.load_cert_chain("<cert path>", "<key path>")

這將創建一個用於“客戶端身份驗證”的服務器端套接字。 如果您不使用客戶端證書(可能性很低),那么這就足夠了。

如果您的證書需要額外的中間證書(“捆綁包”),它們應該是<cert_path>文件的一部分。 .pem格式允許多個證書,一個接一個。

一個簡單的連接通常就可以解決問題。 有關更多信息,請參閱Python 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM