2015-07-08 22 views
7

Komendy:Korzystanie certyfikat klienta w poleceniu Curl Curl

curl -k -vvvv --request POST --header "Content-Type: application/json" --cert client.pem:password --key key.pem "https://test.com:8443/testing" 

Próbuję wysłać certyfikat klienta przy użyciu Curl polecenie określone powyżej. Staram się wiedzieć co następuje:

  1. Jaki jest żądanie nagłówek HTTP, że należy szukać po stronie serwera, aby wyciągnąć certyfikat klienta z żądania HTTP.

  2. Jeśli nie mogę wyciągnąć certyfikatu klienta po stronie serwera z Żądania HTTP, czy mogę dodać niestandardowy nagłówek żądania w Żądaniu HTTP i wysłać certyfikat klienta jako wartość tego niestandardowego nagłówka. Byłoby wspaniale, gdyby ktoś dał mi przykład tego podejścia.

Odpowiedz

11

Certyfikaty klienta TLS nie są wysyłane w nagłówkach HTTP. Są przesyłane przez klienta jako część uzgadniania TLS , a serwer zazwyczaj sprawdza ważność certyfikatu również podczas uzgadniania.

Jeśli certyfikat zostanie zaakceptowany, większość serwerów internetowych można skonfigurować tak, aby dodawały nagłówki do przesyłania certyfikatu lub informacji zawartych w certyfikacie do aplikacji. Zmienne środowiskowe są wypełniane informacjami o certyfikatach w Apache i Nginx, które mogą być używane w innych dyrektywach do ustawiania nagłówków.

Jako przykład tego podejścia poniższy fragment kodu Nginx sprawdza certyfikat klienta, a następnie ustawia nagłówek SSL_CLIENT_CERT, aby przekazać cały certyfikat do aplikacji. To ustawienie zostanie ustawione na tylko wtedy, gdy certyfikat został pomyślnie sprawdzony, więc aplikacja może następnie przeanalizować certyfikat i polegać na informacjach, które nosi.

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; 
    } 
} 
+0

Awesome, ma sens do mnie. Dzięki! – sunsin1985

7

To jak to zrobiłem:

curl -v \ 
    --cacert ./ca.pem \ 
    --key ./admin-key.pem \ 
    --cert ./admin.pem \ 
    https://xxxx/api/v1/