关于this issue,我正在自动构建一些具有HTTPS服务器(nginx)的远程节点。证书由openssl创建。我正在使用curl从服务器读取数据,现在尝试使用wget。 自签名证书将添加到CA存储。通过将pem服务器证书放入/ usr / local / share / ca-certificates并运行 update-ca-certificates --fresh 。
服务器位于alpine:nginx docker实例中。客户端(curl和wget)在Debian 10系统中。
1)卷曲好,wget否
openssl req -newkey rsa:4096 -nodes -subj "/C=NO/L=MOON/O=CONSERITY/CN=${IPDIST}" -keyout /etc/nginx/privkey.pem -x509 -days 1460 -out /etc/nginx/cert_srv.pem
卷曲效果很好。
wget throws:“证书的所有者与主机名' IP '不匹配”
2)卷曲Nok,可以确定
我知道,当证书用于IP时,它必须在SAN扩展中。这似乎是wget的问题。所以我做了以下。
IPSRV=${IPDIST} openssl req -newkey rsa:4096 -config openssl.cnf -extensions v3_req -keyout /etc/nginx/privkey.pem -x509 -days 1460 -out /etc/nginx/cert_srv.pem
具有以下conf文件:
[ req ]
default_bits = 4096
prompt = no
encrypt_key = no
default_md = sha256
distinguished_name = dn
req_extensions = v3_req
[ dn ]
CN = ${ENV::IPSRV}
O = CONSERITY
L = MOON
C = NO
[ v3_req ]
keyUsage = nonRepudiation,digitalSignature,keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
IP.1 = $ENV::IPSRV
但是现在,curl无法正常工作,并引发“ curl:(60)SSL证书问题:无法获取本地发行者证书”
所以我完全迷上了RFC 6125和RFC 2818,应该遵循什么标准,curl和wget的行为是什么,如何解决这两个问题,我做错了什么。
因为curl使用的是openssl,而wget使用的是GnuTLS进行证书处理,所以它们的行为有很大不同。