Curl: (58) Не удалось загрузить ключ клиента -8178

Я столкнулся с проблемой SSL с помощью команды curl. Я хочу получить URL-адрес, используя мой SSL-сертификат клиента и закрытый ключ.

Это моя команда:

$ curl -k -v "https://myurl.com/" --cert ./certificate.pem --key ./private.key

* About to connect() to xx.xx.xx.xx port 23444 (#0)
*   Trying xx.xx.xx.xx... connected
* Connected to xx.xx.xx.xx (xx.xx.xx.xx) port 23444 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* warning: ignoring value of ssl.verifyhost
* Unable to load client key -8178.
* NSS error -8178
* Closing connection #0
curl: (58) Unable to load client key -8178.

Ключ защищен паролем, curl не просит меня ввести пароль, что очень странно. Даже если я передаю пароль с помощью --pass, я все равно получаю ту же ошибку.

Кажется, что аргумент --key не рассматривается, потому что если я заменил на foo.key, который не существует в моей файловой системе, я все равно получаю ту же ошибку.

Однако, если используется:

$ wget --certificate=./certificate.pem --private-key=private.key "https://myurl.com/" --no-check-certificate

Я могу достигнуть своего URL.

Есть ли у вас идеи?

Ответы

Ответ 1

Я столкнулся с той же проблемой и наконец нашел решение, возможно, это может вам помочь.

Ошибка произошла из-за закрытого ключа в PKCS # 8:

  • закрытый ключ PKCS # 8 начинается с  Заголовок -----BEGIN ENCRYPTED PRIVATE KEY-----
    или
     -----BEGIN PRIVATE KEY----- header

    С помощью этой клавиши curl + openssl будет работать, но curl + nss + libnsspem.so не будет.

  • с закрытым ключом RSA, который начинается с  Заголовок -----BEGIN RSA PRIVATE KEY-----

    будут работать как curl + openssl, так и curl + nss + libnsspem.so.

Поэтому используйте эту команду

openssl pkcs8 -in path/to/your/pkcs8/key -out path/to/rsa/key

чтобы преобразовать ключ PKCS # 8 в традиционный ключ RSA.

Ответ 2

Если ваш сертификат содержит кодовую фразу, вы должны добавить его после имени сертификата:

curl -k -v "https://myurl.com/" --cert ./certificate.pem:passphrase --key ./private.key