【问题标题】:Can server_hostname in python wrap_socket holds IPv4 string value?python wrap_socket 中的 server_hostname 可以保存 IPv4 字符串值吗?
【发布时间】:2018-12-20 21:00:45
【问题描述】:

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

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

2) 服务器是否可以托管多个虚拟 IP,以便在 server_hostname 中指定 IPv4 地址来增加价值?

这个例子来自pythonwebsites

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))

【问题讨论】:

    标签: python sockets ssl network-programming tls1.2


    【解决方案1】:

    server_hostname用于开启SNI“服务器名称指示”,所以需要是主机名,不能是IP地址。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 2010-10-21
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多