Использование сертификата клиента в команде Curl
Команда Curl:
curl -k -vvvv --request POST --header "Content-Type: application/json" --cert client.pem:password --key key.pem "https://test.com:8443/testing"
Я пытаюсь отправить сертификат клиента с помощью команды Curl, указанной выше. Я пытаюсь узнать следующее:
что такое заголовок HTTP-запроса, который я должен смотреть на стороне сервера, чтобы вытащить сертификат клиента из HTTP-запроса.
Если я не могу вытащить сертификат клиента на стороне сервера из HTTP-запроса, могу ли я добавить пользовательский заголовок запроса в HTTP Запросите и отправьте сертификат клиента как значение этого пользовательского заголовка. Было бы здорово, если бы кто-то мог привести мне пример такого подхода.
2 ответов
сертификаты клиента TLS не отправляются в заголовках HTTP. Они передаются клиентом как часть TLS рукопожатие, и сервер, как правило, проверяет действительность сертификата во время рукопожатия.
Если сертификат принят, большинство веб-серверов можно настроить для добавления заголовков для передачи сертификата или информации, содержащейся в сертификате, приложению. Переменные среды заполняются сертификатом информация в Apache и nginx и который можно использовать в других директивах для установки заголовков.
в качестве примера этого подхода следующий фрагмент конфигурации nginx проверяет сертификат клиента, а затем устанавливает SSL_CLIENT_CERT
заголовок для передачи всего сертификата приложению. Это будет только быть установлен, когда затем сертификат был успешно проверен, поэтому приложение может затем проанализировать сертификат и полагаться на информацию, которую он медведи.
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/chainedcert.pem; # server certificate
ssl_certificate_key /path/to/key; # server key
ssl_client_certificate /path/to/ca.pem; # client CA
ssl_verify_client on;
proxy_set_header SSL_CLIENT_CERT $ssl_client_cert;
location / {
proxy_pass http://localhost:3000;
}
}
вот как я это сделал:
curl -v \
--cacert ./ca.pem \
--key ./admin-key.pem \
--cert ./admin.pem \
https://xxxx/api/v1/