Skip to content
Snippets Groups Projects
Commit e5491994 authored by Muff Léo's avatar Muff Léo
Browse files

started ACME scripts

parent 319f4aee
No related branches found
No related tags found
No related merge requests found
......@@ -204,12 +204,12 @@ vault secrets tune -max-lease-ttl=240h pki_int
vault write -format=json pki_int/intermediate/generate/internal \
common_name="chepia.ch Intermediate Authority" \
issuer_name="chepia-dot-ch-intermediate" \
| jq -r '.data.csr' > pki_intermediate.csr
| ./jq -r '.data.csr' > pki_intermediate.csr
vault write -format=json pki/root/sign-intermediate \
issuer_ref="root" \
csr=@pki_intermediate.csr \
format=pem_bundle ttl="240h" \
| jq -r '.data.certificate' > intermediate.cert.pem
| ./jq -r '.data.certificate' > intermediate.cert.pem
vault write pki_int/intermediate/set-signed certificate=@intermediate.cert.pem
```
......@@ -615,7 +615,71 @@ spec:
- Activation de la config avec `microk8s kubectl apply -f acme.yaml `
A partir de cette étape, on va pouvoir gérer les certificats de nos clients grâce au protocole ACME. Pour vérifier que le domaine à certifier appartient bien au client, ACME utilise deux types de challenges, DNS01 et HTTP01 :
- **DNS01** : Ce challenge vérifie que le serveur DNS est bien contrôlé par l'utilisateur. Pour cela, celui-ci doit ajouter un enregistrement DNS de type TXT avec une valeur prédéfinie.
- **HTTP01** : Ce challenge vérifie que le serveur web est bien sous le contrôle de l'utilisateur. Pour cela, celui-ci doit placer un fichier contenant un token à l'adresse `http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN>`.
Pour que la certification par ACME réussisse, le client doit donc avoir un serveur DNS mis en place, sinon notre émetteur ACME ne pourra pas accéder au domaine et vérifier le challenge. Mais même avec cela, la mise en place du challenge et l'installation des certificats doit être faite à la main, ce qui n'est pas souhaitable. On va donc créer un script automatisant ces tâches, à l'image de Certbot. Comme celles-ci sont différentes pour chaque type de serveur web (Apache, Nginx, etc), on va se concentrer sur Nginx avec un challenge HTTP01 pour l'instant.
## Création du script
### Récupération du token
- Pour transmettre le token utilisé dans le challenge, il faut choisir une méthode pour authentifier l'utilisateur. Pour cela,
```python
import requests
import json
vault_addr = "http://127.0.0.1:8200"
role_id = "your-role-id"
secret_id = "your-secret-id"
def get_vault_token(role_id, secret_id):
url = f"{vault_addr}/v1/auth/approle/login"
payload = {
"role_id": role_id,
"secret_id": secret_id
}
response = requests.post(url, data=json.dumps(payload))
response.raise_for_status()
return response.json()['auth']['client_token']
vault_token = get_vault_token(role_id, secret_id)
print(f"Vault Token: {vault_token}")
```
```python
import requests
import json
vault_addr = "http://127.0.0.1:8200"
username = "your-username"
password = "your-password"
def get_vault_token(username, password):
url = f"{vault_addr}/v1/auth/userpass/login/{username}"
payload = {
"password": password
}
response = requests.post(url, data=json.dumps(payload))
response.raise_for_status()
return response.json()['auth']['client_token']
vault_token = get_vault_token(username, password)
print(f"Vault Token: {vault_token}")
```
```
server { listen 80; server\_name example.com; location /.well-known/acme-challenge/ { alias /var/www/html/.well-known/acme-challenge/; } location / { # Configuration de votre site } }
```
### Mise en place du challenge
### Installation du certificat
# Glossaire
......@@ -638,4 +702,5 @@ spec:
- https://www.digicert.com/fr/what-is-pki
- https://www.ssldragon.com/blog/best-practices-to-store-the-private-key/
- https://www.thesslstore.com/blog/what-is-a-key-management-service-key-management-services-explained/
- https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html
\ No newline at end of file
- https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html
- https://tharakamd-12.medium.com/writing-your-own-certbot-plugin-for-lets-encrypt-215efb79b950
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment