Udělal jsem to takto:
curl -v \
--key ./admin-key.pem \
--cert ./admin.pem \
https://xxxx/api/v1/
Klientské certifikáty TLS se neodesílají v hlavičkách HTTP. Jsou přenášeny klientem v rámci handshake TLS a server obvykle zkontroluje platnost certifikátu také během handshake.
Pokud je certifikát přijat, většinu webových serverů lze nakonfigurovat tak, aby do aplikace přidaly záhlaví pro přenos certifikátu nebo informací obsažených v certifikátu. Proměnné prostředí jsou naplněny informacemi o certifikátech v Apache a Nginx, které lze použít v jiných direktivách pro nastavení záhlaví.
Jako příklad tohoto přístupu následující fragment konfigurace Nginx ověří klientský certifikát a poté nastaví SSL_CLIENT_CERT
záhlaví pro předání celého certifikátu do aplikace. To bude pouze nastavit, když byl certifikát úspěšně ověřen, takže aplikace pak může certifikát analyzovat a spoléhat se na informace, které nese.
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;
}
}