python wrap_socket 中的 server_hostname 可以保存 IPv4 字符串值吗?
Can server_hostname in python wrap_socket holds IPv4 string value?
我了解 ssl.SSLContext()
对象中的 wrap_socket
函数中的 server_hostname
参数如下例所示,可用于在单个服务器托管多个主机名时识别主机名.是否可以使用 server_hostname
或将 server_hostname
参数与不是主机名字符串而是 IPv4 地址字符串的值一起使用是否有意义?
1) 是否有任何用途或优势可以使我的连接更准确(对于指定的 IP)?
2) 一台服务器是否可以托管许多虚拟 IP,以便在 server_hostname
中指定 IPv4 地址会增加价值?
这个例子来自 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 握手期间提供此信息,否则他们可能会遇到错误的服务或取回错误的证书。
我了解 ssl.SSLContext()
对象中的 wrap_socket
函数中的 server_hostname
参数如下例所示,可用于在单个服务器托管多个主机名时识别主机名.是否可以使用 server_hostname
或将 server_hostname
参数与不是主机名字符串而是 IPv4 地址字符串的值一起使用是否有意义?
1) 是否有任何用途或优势可以使我的连接更准确(对于指定的 IP)?
2) 一台服务器是否可以托管许多虚拟 IP,以便在 server_hostname
中指定 IPv4 地址会增加价值?
这个例子来自 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 握手期间提供此信息,否则他们可能会遇到错误的服务或取回错误的证书。