原因
如果服务器名称是 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之前作成此文件。<