如何使用带有 openSSL 而不是通用名称的 SAN?
How do I use SANs with openSSL instead of common name?
升级使用golang 1.15.0-rc.1的系统(kubernetes)后,卡在了这个错误信息:
"x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0".
我唯一使用公用名(据我所知)的地方是为我的服务生成私钥时 openssl req -new -key certs/foo-bar.pem -subj "/CN=foobar.mydomain.svc" -out certs/foo-bar.csr -config certs/foo-bar_config.txt
。
如何将此命令转换为使用 SAN?
我认为这个博客 post 会对你有所帮助,Know about SAN Certificate and How to Create With OpenSSL。否则,您可以按照错误消息的建议进行操作,并将 GODEBUG="x509ignoreCN=0"
设置为环境变量。
您可能需要 -addext
标志。
例如:
openssl req -new -key certs/foo-bar.pem \
-subj "/CN=foobar.mydomain.svc" \
-addext "subjectAltName = DNS:foobar.mydomain.svc" \
-out certs/foo-bar.csr \
-config certs/foo-bar_config.txt
解决方案
我解释的一清二楚
这个解决方案对我有效。首先你必须有一个 CA,然后由 CA 签署你的服务器证书。我创建了一个 CA 和服务器证书,最后通过下面的命令签署了服务器证书。(更改您想要的 -subj 和 CN)
在您的情况下,您应该在下面的最新命令行中签署服务器证书时传递 subjectAltName。
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA" -out ca.crt
openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=*.example.com" -out server.csr
openssl x509 -req -extfile <(printf "subjectAltName=DNS:example.com,DNS:www.example.com") -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
在 运行 这个命令之后,你可以在 kubernetes secret 中使用证书(server.crt,servert.key)进行入口。
我 运行 在 redhat 8.4 上使用环境变量,它适用于我
export GODEBUG="x509ignoreCN=0"
podman login repo.example.com:5000
用户名:注册用户
密码:
登录成功!
升级使用golang 1.15.0-rc.1的系统(kubernetes)后,卡在了这个错误信息:
"x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0".
我唯一使用公用名(据我所知)的地方是为我的服务生成私钥时 openssl req -new -key certs/foo-bar.pem -subj "/CN=foobar.mydomain.svc" -out certs/foo-bar.csr -config certs/foo-bar_config.txt
。
如何将此命令转换为使用 SAN?
我认为这个博客 post 会对你有所帮助,Know about SAN Certificate and How to Create With OpenSSL。否则,您可以按照错误消息的建议进行操作,并将 GODEBUG="x509ignoreCN=0"
设置为环境变量。
您可能需要 -addext
标志。
例如:
openssl req -new -key certs/foo-bar.pem \
-subj "/CN=foobar.mydomain.svc" \
-addext "subjectAltName = DNS:foobar.mydomain.svc" \
-out certs/foo-bar.csr \
-config certs/foo-bar_config.txt
解决方案
我解释的一清二楚
这个解决方案对我有效。首先你必须有一个 CA,然后由 CA 签署你的服务器证书。我创建了一个 CA 和服务器证书,最后通过下面的命令签署了服务器证书。(更改您想要的 -subj 和 CN)
在您的情况下,您应该在下面的最新命令行中签署服务器证书时传递 subjectAltName。
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA" -out ca.crt
openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=*.example.com" -out server.csr
openssl x509 -req -extfile <(printf "subjectAltName=DNS:example.com,DNS:www.example.com") -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
在 运行 这个命令之后,你可以在 kubernetes secret 中使用证书(server.crt,servert.key)进行入口。
我 运行 在 redhat 8.4 上使用环境变量,它适用于我
export GODEBUG="x509ignoreCN=0"
podman login repo.example.com:5000
用户名:注册用户 密码: 登录成功!