команда curl-невозможно загрузить сертификат клиента -8018
Я пытаюсь подключиться к защищенному веб-сервису через прокси-сервер с помощью команды curl, но я получаю следующую ошибку:
не удалось загрузить сертификат клиента -8018.
полный лог:
[e-ballo@myserver]# curl -v -x proxy01.net:8080 https://endPointURL.com/SOAP --key ./cert.crt --cert ./cert.crt -capath=/etc/pki/tls/certs
* About to connect() to proxy proxy01.net port 8080 (#0)
* Trying 10.0.3.64... connected
* Connected to proxy01.net (10.0.3.64) port 8080 (#0)
* Establish HTTP proxy tunnel to endPointURL.com:443
> CONNECT endPointURL.com:443 HTTP/1.1
> Host: endPointURL.com:443
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.3.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Proxy-Connection: Keep-Alive
>
< HTTP/1.0 200 Connection established
<
* Proxy replied OK to CONNECT request
* Initializing NSS with certpath: sql:/home/e-ballo/
* Unable to initialize NSS database
* Initializing NSS with certpath: none
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Unable to load client cert -8018.
* NSS error -8018
* Closing connection #0
curl: (58) Unable to load client cert -8018.
есть идеи, что означает эта ошибка ? и как я могу это исправить ?
заранее спасибо,
2 ответов
Я также испытал эту проблему на RHEL 6. curl был скомпилирован с NSS, который вы можете увидеть, проверив версию:
$ curl -V
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.3.0 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
решение состоит в том, чтобы предоставить curl ссылку на базу данных NSS, в которой хранится сертификат клиента, который вы хотите использовать.
создать сертификат
я начинал с хранилища ключей Java, которое было создано с помощью этой команды (значение псевдонима будет использоваться для ссылки на сертификат позже):
keytool -genkeypair -alias myclient -keyalg RSA -keystore client_keystore.jks
теперь это хранилище ключей JKS должно быть преобразовано в формат pkcs12:
keytool -importkeystore -srckeystore client_keystore.jks \
-destkeystore client_keystore.p12 -srcstoretype jks \
-deststoretype pkcs12
импорт сертификата в базу данных NSS
затем создайте базу данных NSS в каталоге по вашему выбору:
mkdir /home/user/nss
certutil -N -d /home/user/nss
эта команда certutil создает 3 .файлы БД, включая cert8.децибел. Это" старый " формат БД, но он все равно должен работать. Просмотрите документацию certutil, если вам нужно создать cert9.вместо этого файл db.
использовать pk12util для импорта client_keystore.p12 в базу данных NSS
pk12util -i client_keystore.p12 -d /home/user/nss
при необходимости просмотрите сохраненный сертификат в базе данных:
certutil -L -d /home/user/nss -n myclient
используйте сертификат от curl
сертификат теперь готов к использованию curl, но нам нужно сообщить curl, где его найти. Как указано в руководстве curl, создайте переменную среды SSL_DIR:
export SSL_DIR=/home/user/nss
наконец, команда curl:
curl -vk --cert myclient https://localhost:8443/my/url
Примечание: опция-k указано здесь, поскольку сервер использует самозаверяющий сертификат. См. руководство curl для указания cacert.
Не забудьте добавить сертификат клиента в хранилище доверия сервера, если это необходимо.
ссылка
Я уже исправил эту проблему, поэтому я опубликую решение. Может, поможет кому-нибудь.
моя версия curl была скомпилирована с библиотеками Netscape Security System (NSS) вместо библиотек openSSL. Версии curl, скомпилированные с помощью этих двух библиотек, используют разные методы доступа к сертификатам. Я вызывал плоский файл, который является методом openSSL. Другим решением будет установка NSS (уже на большинстве производных Red Hat) и создание cert9.файл db , импортируйте свой сертификат и ключ (после преобразования в P12 с openssl-не забудьте добавить "freindlyName" или псевдоним) в эту БД с помощью pk12util. Затем вы вызываете сертификат по его нику и даете пароль для БД.
другой вариант-получить или скомпилировать версию curl с помощью библиотек openssl. RedHat 5, ubuntu или Windows версии curl часто уже скомпилированы таким образом. Red Hat 6 поставляется с завитком, скомпилированным для NSS.