gpt4 book ai didi

python - python wrap_socket 中的 server_hostname 可以保存 IPv4 字符串值吗?

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:37 27 4
gpt4 key购买 nike

我理解 ssl.SSLContext() 对象中 wrap_socket 函数中的 server_hostname 参数如下例所示可用于当单个服务器托管多个主机名时识别主机名。 server_hostname 是否可以使用,或者使用 server_hostname 参数的值不是主机名字符串而是 IPv4 地址字符串是否有意义?

1) 是否有任何用途或优势可以使我的连接更准确(对于指定的 IP)?

2) 一台服务器是否可以托管许多虚拟 IP,以便在 server_hostname 中指定一个 IPv4 地址会增加值(value)?

这个例子来自 python websites

import socket, ssl

context = ssl.SSLContext()
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
context.load_default_certs()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
ssl_sock.connect(('www.verisign.com', 443))

最佳答案

server_hostname用于启用SNI“Server Name Indication”,因此需要是主机名,不能是IP地址。

这正是为了能够为多个主机名(想想网站)提供 TLS 服务,这些主机名都在同一台服务器上运行,因此也就是 IP 地址。 TLS 握手(以及证书交换)发生在任何类型的数据级交换之前,其中主机名可以给出提示(如 HTTP 中的 host header ),因此我们需要 TLS 中的 SNI 来传达该信息.

所有表现良好的客户端都应在 TLS 握手期间提供此信息,否则他们可能会遇到错误的服务或取回错误的证书。

关于python - python wrap_socket 中的 server_hostname 可以保存 IPv4 字符串值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51308870/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com