X509v3 Subject Alternative Name (SAN)是 TLS 证书中的一个扩展字段,用于指定与证书主题相关的附加名称。
这些附加名称可以是 IP 地址、DNS 名称、电子邮件地址等,用于指定证书可用于哪些服务或主机。
这个字段的存在可以提高证书的灵活性和可用性,因为它允许一个证书可以同时适用于多个不同的主机或服务。
例如,一个 TLS 证书可以同时指定多个域名,这样就不需要为每个域名单独颁发证书了。
openssl 创建证书 ,如何添加SAN?
要在 OpenSSL 创建证书时添加 SAN,需要在配置文件中添加一个 subjectAltName
扩展。以下是一个示例配置文件:
[req]
distinguished_name = req_distinguished_name
req_extensions = req_ext
[req_distinguished_name]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name (full name)
localityName = Locality Name (eg, city)
organizationName = Organization Name (eg, company)
commonName = Common Name (e.g. server FQDN or YOUR name)
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = example.com
DNS.2 = www.example.com
IP.1 = 192.168.1.1
在 req_ext
部分中添加了 subjectAltName
扩展,并在 alt_names
部分中列出了要添加的 SAN,包括两个 DNS 名称和一个 IP 地址。可以根据需要添加或删除 SAN。
然后可以使用以下命令创建证书:
openssl req -new -x509 -sha256 -key example.key -out example.crt -days 365 -config example.cnf
其中,example.key
是私钥文件,example.crt
是证书文件,example.cnf
是上述配置文件。
创建证书时,OpenSSL 将读取配置文件中的 subjectAltName
扩展,并将其添加到证书中作为 SAN。
查看证书详情:
openssl x509 -noout -text -in xxx.crt
keytool 创建证书 ,如何添加SAN?
要在 keytool 创建证书时添加 SAN,可以使用 -ext
参数添加 subjectAltName
扩展。
以下是一个示例命令:
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 -ext SAN=dns:example.com,dns:www.example.com,ip:192.168.1.1
keytool \
-genkeypair \
-keystore keystore.jks \
-alias nexus \
-keypass Nexus@123 \
-storepass Nexus@456 \
-keyalg RSA \
-keysize 2048 \
-validity 3650 \
-dname "CN=*.example.com,OU=Test,O=Test,L=ShenZhen,ST=GuangDong,C=CN" \
-ext "SAN=IP:192.168.1.103" \
-ext "BC=ca:true"
在此示例中,-ext
参数指定了 subjectAltName
扩展,并在其中列出了要添加的 SAN,包括两个 DNS 名称和一个 IP 地址。
可以根据需要添加或删除 SAN。
创建证书时,keytool 将读取 -ext
参数中的 subjectAltName
扩展,并将其添加到证书中作为 SAN。
查看证书详情:
# keytool -v -list -keystore keystore.jks -storepass "xxx"
keytool是Java开发工具中的一个用于管理密钥和证书的命令行工具。
-ext选项是keytool中的一个拓展选项,用于在证书中添加扩展信息。
具体用法如下:
- 添加扩展信息
在创建证书时,可以使用-ext选项来添加扩展信息,如下所示:
keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.jks -ext san=dns:example.com
这个命令将创建一个新的密钥对,并将证书中添加一个Subject Alternative Name(SAN)扩展信息,其值为dns:example.com。
- 查看扩展信息
可以使用-keyext选项来查看证书中的扩展信息,如下所示:
keytool -list -v -keystore mykeystore.jks -alias myalias -keyext
这个命令将列出与别名myalias关联的证书,并显示证书中的扩展信息。
- 删除扩展信息
可以使用-deleteext选项来删除证书中的扩展信息,如下所示:
keytool -deleteext -alias myalias -keystore mykeystore.jks -ext san=dns:example.com
这个命令将删除与别名myalias关联的证书中的Subject Alternative Name(SAN)扩展信息,其值为dns:example.com。
keytool中有很多拓展选项可以使用,以下是其中一些常用的拓展选项:
-
-ext san=dns:example.com - 添加Subject Alternative Name(SAN)扩展信息,指定证书适用的主机名或IP地址。
-
-ext bc=critical,CA:true - 添加Basic Constraints(BC)扩展信息,指定证书是否为CA证书。
-
-ext ku=critical,keyCertSign,cRLSign - 添加Key Usage(KU)扩展信息,指定密钥的用途,如签署证书或撤销证书。
-
-ext eku=critical,serverAuth,clientAuth - 添加Extended Key Usage(EKU)扩展信息,指定证书的使用目的,如用于服务器身份验证或客户端身份验证。
-
-ext crlDistributionPoints=http://example.com/crl.crl - 添加CRL Distribution Points(CDP)扩展信息,指定证书吊销列表(CRL)的分发位置。
-
-ext ocsp=http://example.com/ocsp - 添加OCSP扩展信息,指定在线证书状态协议(OCSP)的地址。
-
-ext subjectKeyIdentifier - 添加Subject Key Identifier(SKI)扩展信息,指定证书的主题密钥标识符。
-
-ext authorityKeyIdentifier - 添加Authority Key Identifier(AKI)扩展信息,指定证书颁发机构的密钥标识符。
以上是一些常见的keytool拓展选项,还有其他拓展选项可以根据需要使用。
总之,-ext选项是keytool中的一个非常有用的拓展选项,可用于在证书中添加、查看和删除扩展信息。
参考
keytool
https://docs.oracle.com/en/java/javase/11/tools/keytool.html
CentOS7.x上用harbor安装docker镜像仓库
https://www.jianshu.com/p/1e40b58089ac
用nexus3.5搭建docker私有仓库
https://www.jianshu.com/p/7a7db54a538f
网友评论