2015/09/17 (木)

NSS わからんちん。

2015-09-17:curl: (58) Unable to load client cert -8018.

例によって年イチくらいでハマる PKI まわり。
クライアント証明書を使って WebAPI を叩くサービスで、クライアント証明書を SHA-2 に移行しましょうね、というテストをしていて、タイトルのエラー。

$ /usr/bin/curl -E ./client.pem:xxxx -X POST -H 'Content-type: text/xml' -d 'aho' https://dokkano/api
curl: (58) Unable to load client cert -8018.

ちなみにクライアント機は CentOS6。
エラーメッセージをぐぐると、NSS に絡んだエラーらしい。CentOS6 の curl な NSS を組み込んだものなのね。

$ curl -V
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 

でもって、ググってでてきたページたちを参考にクライアント証明書を /etc/pki/nssdb/ 以下に突っ込んでみたりと半日ほど試行錯誤するも、、、うまくいかず。
NSS よく分からん、なんなのこれーーーー、と詰まったので、

もういい、野良ビルドしたる!

と、ソースもってきて、/usr/local/src 以下でビルド。
で、できた /usr/local/bin/curl を使うようにしたら、あっさり動いた。
うーん。。。

$ /usr/local/bin/curl -V
curl 7.44.0 (x86_64-unknown-linux-gnu) libcurl/7.44.0 OpenSSL/1.0.1e zlib/1.2.3 libidn/1.18
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets 
comment