Добрый день!
Сертификат client.p12, конвертирую из p12 в pem, openssl pkcs12 -in client.p12 -out client.pem -nodes
устанавливается без ошибок
при подключении curl (curl http://xx.xx.xx.xx:xxx/) выдает ошибку curl: (35) gnutls_handshake() failed: Certificate is bad
?
сертификат безопасности
Должно быть как то так:
[console]curl --cacert /path/to/CA/certificate \
--cert /path/to/client/certificate \
--key /path/to/client/certificate/key \
https://127.0.0.1 -v[/console]
(надеюсь не нужно пояснять что "\" означает что строка не кончилась а продолжается на следующей для удобства разбито на несколько строк таким образом при выполнении команды данных символов не должно быть и вся команда в одну строку.)
mozgfx,
Ну почему же «данных символов не должно быть», можно прямо так и набирать (или копировать и вставлять) и в командной строке, и в сценарии, главное — символ "\" должен быть последним в строке, после него не должно быть даже пробела.
bormant, писал со смартфона может непонятно написал....
Имелось ввиду, что при выполнении данной команды символы не учитываются, а вся команда выполняется как будто написана в одну строку.
К примеру в OpenSUSE чтобы написать такое в командной строке не вставляя из буфера обмена используется символ \ и комбинация SHIFT+ENTER.
Пишем:
Команда \(жмем Shift+Enter*)
Аргумент 1 \(жмем Shift+Enter)
Аргумент 2 и т.д.\(жмем Shift+Enter*)
Аргумент последний после него жмем Enter
Команда выполнится так как будто записана в одну строку...
* если символа \ нет перед курсором, то команда работает как обычный Enter.
mozgfx,
В OpenSUSE нет bash или другой оболочки, совместимой с ним?
man bash
A non-quoted backslash (\) is the escape character. It preserves the literal value of the next character that follows, with the exception of <newline>. If a \<newline> pair appears, and the backslash is not itself quoted, the \<newline> is treated as a line continuation (that is, it is removed from the input stream and effectively ignored).
Должно быть как то так:
[console]curl --cacert /path/to/CA/certificate \
--cert /path/to/client/certificate \
--key /path/to/client/certificate/key \
https://127.0.0.1 -v[/console]
(надеюсь не нужно пояснять что "\" означает что строка не кончилась а продолжается на следующей для удобства разбито на несколько строк таким образом при выполнении команды данных символов не должно быть и вся команда в одну строку.)
Добрый день!
должен быть корневой сертификат, клиентский и ключ?
mozgfx,
В OpenSUSE нет bash или другой оболочки, совместимой с ним?
Есть как в оригинальной так и в OpenSuse запускаемой в WSL на Windows 10.
Добавлено: 25.11.2019 19:50:51
должен быть корневой сертификат, клиентский и ключ?
В примере указано именно так. На практике не приходилось применять.
curl --cacert /usr/local/local/local/client.crt https://127.0.0.1:0000 -v
Rebuilt URL to: ://127.0.0.1:0000
Trying 127.0.0.1...
Connected to 127.0.0.1 (127.0.0.2) port 0000 (#0)
found 1 certificates in /usr/local/local/local/client.crt
ALPN, offering http/1.1
gnutls_handshake() failed: Certificate is bad
Closing connection 0
curl: (35) gnutls_handshake() failed: Certificate is bad
получается что-то с сертификатом?
curl --cacert /usr/local/local/local/client.crt https://127.0.0.1:0000 -v
Ничего не смущает?
Указан корневой сертификат cacert, а используется сертификат клиента.
Тогда уже нужно использовать cert вместо cacert.
если использовать cert выходит следующее
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
а если добавить -k то curl: (35) error reading X.509 key or certificate file: Error while reading file.