我已经使用以下命令创建了SSl证书:
openssl genrsa -out kc_ca-key 2048
openssl req -new -out san_domain.csr -key kc_ca-key -config openssl.cnf
openssl x509 -req -days 3650 -in san_domain.csr -signkey kc_ca-key -out kc_ca-cert -extensions v3_req -extfile openssl.cnf
openssl.cnf文件包含通用名称,国家/地区名称,使用者替代名称和所有此类信息。 在浏览器中,导入此证书后可以安全连接,但是当我使用相同的证书运行curl命令时,出现以下错误:
NSS错误-8156(SEC_ERROR_CA_CERT_INVALID) *颁发者证书无效。 *关闭连接0 curl:(60)颁发者证书无效。 此处有更多详细信息:http://curl.haxx.se/docs/sslcerts.html
curl默认情况下使用“捆绑包”执行SSL证书验证 证书颁发机构(CA)公共密钥(CA证书)。如果默认 捆绑文件不足,您可以指定备用文件 使用--cacert选项。 如果此HTTPS服务器使用由表示为 捆绑软件,证书验证可能由于 证书有问题(证书可能已过期,或者名称可能 与网址中的域名不匹配。
如何解决此错误
答案 0 :(得分:0)
没有足够的信息来确定您的问题所在。
我正在做以下假设:
如果上述情况属实,并且Firefox之类的Web浏览器(使用其内部CA列表)失败,则是因为该Web服务器使用的是没有任何中间证书的证书。
您需要查找CA签名证书的中间证书,将它们组合到证书链中,并使用此证书链设置Web服务器。具体操作方法取决于您的Web服务器。
一旦Web服务器设置了正确的证书链,那么curl命令(和Firefox)就可以正常工作。
Windows运行良好的原因是因为Windows保留了可以用来验证证书链的常见中间证书的列表。基于opensl的客户端不需要,因此中间证书必须从SSL套接字服务器(例如Web服务器)传到客户端,以便能够将证书链验证回到客户端CA列表中的受信任根证书。 / p>