我正在尝试使用curl访问https地址,将其传递给我的证书并使用我自己的信任库验证服务器的证书(我们有自己的CA)。我现在以root身份运行。
curl -v --cert /home/cdfoote/myCertificate.pem:mypassword --cacert /home/cdfoote/truststore.pem https://host.com:8444
这给了我错误:
Unable to load client cert -8018
NSS error -8018
谷歌搜索并确定我的卷曲是用nss编译的我已将我的证书转换为.pfx(我以.jks开头)并通过以下方式将其导入到nss db中:
pk12util -i /home/cdfoote/myCertificate.pfx -d /etc/pki/nssdb
当我在db中列出所有证书时,我看到了它:
certutil -L -d /etc/pki/nssdb
当我用昵称列出它时,我会看到它的详细信息:
certutil -L -d /etc/pki/nssdb -n myCert
我通过以下方式提供了数据库:
export SSL_DIR=/etc/pki/nssdb
现在,我正在运行的curl命令是:
curl -v --cert myCert --cacert /home/cdfoote/truststore.pem https://host.com:8444
回复是:
About to connect to https//host.com port 8444 (#0)
Trying ipaddress
Connected to host.com (ipaddress) port 8444(#0)
Initializing NSS with certpath: sql:/etc/pki/nssdb
CAfile: /home/cdfoote/truststore.pem
CApath: none
NSS: client certificate not found: myCert
SSL connection using TLS_DHE_RSA_WITH_AES_256_CBC_SHA
Server certificate:
...
{
"status" : "403 - Forbidden",
...
几个问题:
“CApath:none”是否表示即使“CAfile”正确,也找不到信任库?如果是这样,任何想法都没有找到?
知道为什么找不到'myCert',即使NSS被初始化为正确的'certpath'(它列出的很好)?
在另一个框中,显然使用openssl而不是NSS编译curl,上面的原始curl命令有效。有没有办法在不重新编译的情况下以这种方式运行curl?
提前致谢, 克雷格