如果服务器名称是 IP 地址,还会检查证书的Subject Alternative Name(SAN),因此需要创建一个包含此名称的证书。
否则,docker login 时会报如下错误:
Error response from daemon: Get https://x.x.x.x/v2/: x509: cannot validate certificate for x.x.x.x because it doesn't contain any IP SANs解决方法
在证书中生成x509v3 Extensions。要将 extensions 添加到证书中,需要在签署证书时使用“-extensions”选项。
例:
#openssl ca -policy policy_anything -config -out windows_server.crt -extensions some_ext -extfile some_extensions.txt -infiles cert_request.csr
重点在于【-extensions some_ext -extfile some_extensions.txt】这句。且前提是,已经在同一目录下创建了一个名为“some_extensions.txt”的文件,并且它具有 some_ext 扩展名。
为了实现自动化,可以在shell中写入如下代码,让其自动执行。
要点如下:
- 本次需要的extensions类型是"v3_ca",内容是"subjectAltName = IP:ip地址",需要在生成csr之前作成此文件。
- 在生成crt的语句中,需要加入"-extensions v3_ca -extfile /etc/cert/extfile.cnf"。
#!/bin/sh if [ ! -d /etc/cert ] ; then mkdir -p /etc/cert touch /etc/cert/extfile.cnf cat>/etc/cert/extfile.cnf<签署证书后,检查扩展是否正确添加。
#openssl x509 -text -noout -in user-certificate.crt ...(略) X509v3 extensions: X509v3 Subject Alternative Name: IP Address:ip地址 ...(略)参考构建docker私有仓库
当服务器名是IP地址时创建SSL证书
How to generate x509v3 Extensions in the End user certificate



