2017-05-19 2 views
1

Je ne parviens pas à mettre ce que la documentation dit en pratique. J'essaye de m'authentifier à un service de coffre en utilisant des certificats. Le documentation dit:mise en œuvre curl Comprendre

Via l'API

Le critère d'évaluation pour la connexion est/login. Le client se connecte simplement avec leur certificat TLS et lorsque le point final de connexion est touché, le back-end auth déterminera s'il y a un certificat approuvé correspondant à authentifier le client. En option, vous pouvez spécifier un seul rôle de certificat à authentifier.

$ curl --cacert ca.pem --cert cert.pem --key key.pem -d name=web \ 
    $VAULT_ADDR/v1/auth/cert/login -XPOST 

maintenant l'adresse IP du noeud: Port que je veux authentifier auprès est 17.2.24.13:8200

Donc, voici ce que je fais depuis un serveur distant.

openssl s_client -showcerts -connect 17.2.24.13:8200 

Cela conduit à une sortie gigantesque qui contient une section ::

-----BEGIN CERTIFICATE----- 
XXXXXXXXXXXXXXXXXX 
XXXXXXXXXXXXXXXXXX 
XXXXXXXXXXXXXXXXXX 
-----END CERTIFICATE----- 

Maintenant, je crois que c'est le certificat, le besoin Vault.

J'écrire la sortie ci-dessus pour vault.cer fichier

Maintenant, en utilisant vault.cer Je vais authentifier. Donc Im en cours d'exécution de la commande ci-dessous.

curl --cert vault.crt https://17.2.24.13:8200/v1/auth/cert/login -XPOST 

Mais l'erreur que je reçois est:

curl: (60) Certificate key usage inadequate for attempted operation. 
More details here: http://curl.haxx.se/docs/sslcerts.html 

curl performs SSL certificate verification by default, using a "bundle" 
of Certificate Authority (CA) public keys (CA certs). If the default 
bundle file isn't adequate, you can specify an alternate file 
using the --cacert option. 
If this HTTPS server uses a certificate signed by a CA represented in 
the bundle, the certificate verification probably failed due to a 
problem with the certificate (it might be expired, or the name might 
not match the domain name in the URL). 
If you'd like to turn off curl's verification of the certificate, use 
the -k (or --insecure) option. 

Si j'ajoute le drapeau -k, je reçois l'erreur ci-dessous. Donc, je suis vraiment confus quant à ce qui me manque vraiment dans ce scénario.

Répondre

2

Le certificat qui est montré dans la sortie de openssl s_client -showcerts -connect 17.2.24.13:8200 est le certificat serveur plutôt qu'un certificat client. Le premier est utilisé pour authentifier le serveur auprès du client. Vous êtes plutôt cherchez à authentifier le client au serveur pour lequel vous devez présenter un certificat approuvé par le serveur et que vous possédez à la fois le public et la clé privée.

Quels sont les certificats clients sont dignes de confiance par le serveur et comment obtenir un tel certificat est une question que vous devriez demander au propriétaire du service.

1

Le cert que vous obtenez via la commande ci-dessous est la clé publique du serveur Web.

openssl s_client -showcerts -connect 17.2.24.13:8200 

Dans la citation ci-dessous « leur certificat TLS » fait référence à un cert que le client (boucle) présenterait au serveur.

Le client se connecte simplement avec leur certificat TLS

Qu'est-ce que vous avez besoin est une clé privée signé. J'ai trouvé cette réponse par @Paul Kehrer à la question "How to create .pem files for https web server" donne un bon ensemble de mesures sur la façon de générer un cert auto-signé. Si vous devez le faire signer par une autorité de certification, vous devez simplement envoyer le CSR à une autorité de certification à signer.