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