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