简介

用于 Web 服务器的 SSL 证书需要包含 SAN 信息;如果没有包含 SAN 信息,则有些客户端会提示错误: x509: cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs

用 keytool 生成

keytool 工具是 Java 提供的用于生成证书的工具,位于 $JAVA_HOME/bin 下。 证书生成命令:

# keytool -genkey -alias tomcat -keyalg RSA -ext SAN=IP:x.x.x.x

如果不是 IP,而是域名的话:

# keytool -genkey -alias tomcat -keyalg RSA -ext SAN=DNS:test.example.com

用 openssl 生成

参考 基于 OpenSSL 自建 CA 和颁发 SSL 证书 。 在 openssl.conf 中添加:

[SAN]
subjectAltName=@alt_names

[alt_names]
IP.1 = x.x.x.x
IP.2 = x.x.x.x
DNS.3 = xxx.xxx.xxx
DNS.4 = xxx.xxx.xxx

生成证书签署请求

# openssl req -new -key tomcat.key -out tomcat.csr -reqexts SAN

根据请求来签署证书

# openssl ca -in tomcat.csr -out tomcat.crt -extensions SAN

参考

SSL/TLS Configuration HOW-TO

基于 OpenSSL 自建 CA 和颁发 SSL 证书

OpenSSL SAN 证书