So habe ich es gemacht:
curl -v \
--key ./admin-key.pem \
--cert ./admin.pem \
https://xxxx/api/v1/
TLS-Clientzertifikate werden nicht in HTTP-Headern gesendet. Sie werden vom Client im Rahmen des TLS Handshake übermittelt , und der Server überprüft normalerweise auch die Gültigkeit des Zertifikats während des Handshakes.
Wenn das Zertifikat akzeptiert wird, können die meisten Webserver so konfiguriert werden, dass Header hinzugefügt werden, um das Zertifikat oder die auf dem Zertifikat enthaltenen Informationen an die Anwendung zu übertragen. Umgebungsvariablen werden in Apache und Nginx mit Zertifikatsinformationen gefüllt, die in anderen Anweisungen zum Setzen von Headern verwendet werden können.
Als Beispiel für diesen Ansatz validiert das folgende Nginx-Konfigurations-Snippet ein Client-Zertifikat und legt dann den SSL_CLIENT_CERT
fest Header, um das gesamte Zertifikat an die Anwendung zu übergeben. Dies wird nur festgelegt werden, wenn das Zertifikat erfolgreich validiert wurde, sodass die Anwendung das Zertifikat analysieren und sich auf die darin enthaltenen Informationen verlassen kann.
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;
}
}