传输层安全 (TLS) 实验
完成条件
许多网站都有不同的 URL,例如, www.example.com} , www.example.org} , example.com} 都指向同一 Web 服务器。由于大多数 TLS 客户端程序都实施了主机名匹配策略,因此证书中的公用名必须与服务器的主机名匹配,否则 TLS 客户端将拒绝与服务器通信。
为了使证书具有多个名称, X.509 规范定义了一个叫 Subject Alternative Name (SAN)的扩展。使用 SAN 扩展,可以在证书的 subjectAltName} 字段中指定多个主机名。
要使用该字段生成证书签名请求,我们可以使用配置文件,并将所有必要的信息放入该文件中( PKI 实验显示了如何在命令行中执行所有操作)。以下配置文件给出了一个示例。它指定 subject 字段的内容,并在扩展中添加 subjectAltName} 字段。该字段指定多个备用名称,包括通配符名称 *.bank32.com} 。应该注意的是,该字段还必须包括 common name 字段里的名字,否则 common name 字段里的名字将不会被接受。
/* server_openssl.cnf */
[ req ]
prompt = no
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
C = US
ST = New York
L = Syracuse
O = XYZ LTD.
CN = www.bank32.com
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.bank32.com
DNS.2 = www.example.com
DNS.3 = *.bank32.com
我们可以使用下面的 "openssl req"} 命令生成一对公私钥对和一个证书签名请求:
openssl req -newkey rsa:2048 -config ./server_openssl.cnf -batch \
-sha256 -days 3650 -keyout server.key -out server.csr
出于安全考虑,默认情况下 CA 签署证书时不会将扩展字段从证书签名请求中复制到最终证书中。为了允许复制,我们需要更改 openssl} 的配置文件。默认情况下, openssl} 使用 \path{/usr/lib/ssl} 目录中的配置文件 openssl.cnf} 。在此文件中, copy\_extensions} 选项被禁用(注释掉了)。我们不想修改系统的配置文件,所以我们将文件复制到自己的文件夹中,将其重命名为 myopenssl.cnf} 。然后,我们从该文件中取消以下行的注释:
# Extension copying option: use with caution.
copy_extensions = copy
我们用下面的程序和证书签名请求为服务器生成证书 ( server.crt}),请求中所有的扩展域都会被复制到最终的证书中。
openssl ca -md sha256 -days 3650 -config ./myopenssl.cnf -batch \
-in server.csr -out server.crt \
-cert ca.crt -keyfile ca.key
学生需要展示自己的服务器可以支持多个主机名,包括其各自域名中的主机名。
最后修改: 2025年05月13日 星期二 09:36