颁发者证书在自签名SSL证书中无效

时间:2019-03-13 10:37:04

标签: ssl curl openssl ssl-certificate

我已经使用以下命令创建了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服务器使用由表示为  捆绑软件,证书验证可能由于  证书有问题(证书可能已过期,或者名称可能  与网址中的域名不匹配。

如何解决此错误

1 个答案:

答案 0 :(得分:0)

没有足够的信息来确定您的问题所在。

我正在做以下假设:

  1. 您已将证书请求(CSR)发送给CA提供商并获得了证书。
  2. 您使用该证书设置了某种Web服务器
  3. 我还假设您使用的是IE或Chrome这样的“ Windows”网络浏览器,该浏览器使用Windows证书存储区来测试证书。
  4. 签署证书的CA是众所周知的CA,在所有公共CA列表中都有根证书。

如果上述情况属实,并且Firefox之类的Web浏览器(使用其内部CA列表)失败,则是因为该Web服务器使用的是没有任何中间证书的证书。

您需要查找CA签名证书的中间证书,将它们组合到证书链中,并使用此证书链设置Web服务器。具体操作方法取决于您的Web服务器。

一旦Web服务器设置了正确的证书链,那么curl命令(和Firefox)就可以正常工作。

Windows运行良好的原因是因为Windows保留了可以用来验证证书链的常见中间证书的列表。基于opensl的​​客户端不需要,因此中间证书必须从SSL套接字服务器(例如Web服务器)传到客户端,以便能够将证书链验证回到客户端CA列表中的受信任根证书。 / p>