Ecco come l'ho fatto:
curl -v \
--key ./admin-key.pem \
--cert ./admin.pem \
https://xxxx/api/v1/
I certificati client TLS non vengono inviati nelle intestazioni HTTP. Vengono trasmessi dal client come parte dell'handshake TLS , e il server in genere verificherà anche la validità del certificato durante l'handshake.
Se il certificato viene accettato, la maggior parte dei server Web può essere configurata per aggiungere intestazioni per la trasmissione del certificato o delle informazioni contenute nel certificato all'applicazione. Le variabili di ambiente sono popolate con informazioni sul certificato in Apache e Nginx che possono essere utilizzate in altre direttive per impostare le intestazioni.
Come esempio di questo approccio, il seguente frammento di configurazione di Nginx convaliderà un certificato client e quindi imposterà SSL_CLIENT_CERT
header per passare l'intero certificato all'applicazione. Questo sarà solo essere impostato quando il certificato è stato convalidato con successo, in modo che l'applicazione possa quindi analizzare il certificato e fare affidamento sulle informazioni che contiene.
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;
}
}