Voici comment j'ai procédé :
curl -v \
--key ./admin-key.pem \
--cert ./admin.pem \
https://xxxx/api/v1/
Les certificats client TLS ne sont pas envoyés dans les en-têtes HTTP. Ils sont transmis par le client dans le cadre de la prise de contact TLS , et le serveur vérifiera généralement également la validité du certificat lors de la poignée de main.
Si le certificat est accepté, la plupart des serveurs Web peuvent être configurés pour ajouter des en-têtes pour transmettre le certificat ou les informations contenues sur le certificat à l'application. Les variables d'environnement sont remplies avec des informations de certificat dans Apache et Nginx qui peuvent être utilisées dans d'autres directives pour définir les en-têtes.
À titre d'exemple de cette approche, l'extrait de code de configuration Nginx suivant validera un certificat client, puis définira le SSL_CLIENT_CERT
header pour transmettre l'intégralité du certificat à l'application. Cela va seulement être défini lorsque le certificat a été validé avec succès, afin que l'application puisse ensuite analyser le certificat et s'appuyer sur les informations qu'il contient.
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;
}
}