🇫🇷 Serveur Pwic.wiki fonctionnant avec Python et SQLite
🦜 Accueil Démonstration Fonctionnalités Installation Support
⭐ Special ⏰ History 📤 Email 🖨️ Print 💾 MD 💾 ODT
📌
1. Introduction 2. Génération des certificats 2.1. Gratuit et auto-signé 2.2. Gratuit avec Let's Encrypt 2.3. Payant avec des autorités 3. Activer HTTPS dans Pwic.wiki 3.1. Sans reverse proxy 3.2. Avec un reverse proxy 4. Ouvrez votre pare-feu

Related pages: 🇬🇧 Setup HTTPS

1. Introduction

HTTPS signifie que votre connexion à Pwic.wiki est cryptée pour n'importe quel rôle. La preuve est d'avoir un cadenas dans la barre d'adresse de votre navigateur. Le problème est que l'émission d'un certificat doit se faire dans la confiance, sinon l'utilisateur reçoit un avertissement indiquant que l'identité du site web ne peut pas être vérifiée.

Il est très important d'éviter que vos mots de passe soient volés. Sur un réseau local, il est très facile d'intercepter les mots de passe si vous n'utilisez pas de connexion sécurisée. Sur Internet, c'est un peu différent mais le risque est exactement le même. Même si les tâches les plus critiques dans Pwic.wiki ne peuvent être effectuées qu'à partir d'un terminal (nécessairement crypté par défaut), ça n'est pas une raison pour ne pas sécuriser vos connexions.

Il existe plusieurs possibilités d'obtention d'un certificat :

La configuration de Pwic.wiki importe également selon si un reverse proxy est utilisé ou pas.

2. Génération des certificats

2.1. Gratuit et auto-signé

Ce type de certificat est certainement le moyen le moins cher pour faire des tests et déboguer. À aucun moment un tel certificat ne peut être reconnu pour un usage public, car vous pouvez signer n'importe quel site web de votre choix.

Le script suivant est disponible pour Linux sur lequel OpenSSL est installé. Il a été conçu par Mr.Buttons sur l'excellent forum StackOverflow et adapté par nos soins pour s'intégrer au code de Pwic.wiki. Enregistrez le script suivant dans le fichier pwic_cert.py :

from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives.asymmetric import rsa from cryptography import x509 from cryptography.x509.oid import NameOID from cryptography.hazmat.primitives import hashes import datetime from os.path import isdir from pwic_lib import PwicConst, PwicLib # Helpers def _ssl_input(topic: str, sample: str) -> str: print('%s (ex: %s) : ' % (topic, sample), end='') return input() # Check the database if not isdir(PwicConst.DB): print('Error: the database is not created yet') exit() # Private key key = rsa.generate_private_key(public_exponent=65537, key_size=2048, backend=default_backend()) with open(PwicConst.PRIVATE_KEY, 'wb') as f: f.write(key.private_bytes(encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncryption())) # Public key issuer = x509.Name([ x509.NameAttribute(NameOID.COUNTRY_NAME, _ssl_input('ISO code of the country on 2 characters', 'FR')), x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, _ssl_input('Full country', 'France')), x509.NameAttribute(NameOID.LOCALITY_NAME, _ssl_input('Your town', 'Paris')), x509.NameAttribute(NameOID.ORGANIZATION_NAME, _ssl_input('Your organization', 'Pwic.wiki')), x509.NameAttribute(NameOID.COMMON_NAME, _ssl_input('Common name', 'Pwic.wiki')), ]) hosts = PwicLib.list(_ssl_input('Your hosts separated by space', 'www.your.tld')) if len(hosts) == 0: exit() cert = x509.CertificateBuilder() \ .subject_name(issuer) \ .issuer_name(issuer) \ .public_key(key.public_key()) \ .serial_number(x509.random_serial_number()) \ .not_valid_before(datetime.datetime.utcnow()) \ .not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=365 * 5)) \ .add_extension(x509.SubjectAlternativeName([x509.DNSName(h) for h in hosts]), critical=False) \ .sign(key, hashes.SHA256(), default_backend()) with open(PwicConst.PUBLIC_KEY, 'wb') as f: f.write(cert.public_bytes(serialization.Encoding.PEM)) # Final output print('\nThe certificates are generated:') print('- Private key: ' + PwicConst.PRIVATE_KEY) print('- Public key: ' + PwicConst.PUBLIC_KEY)

Après avoir exécuté ce script avec la commande python3 pwic_cert.py, deux fichiers sont enregistrés dans le répertoire db/. Les fichiers sont valables pour les 5 prochaines années et contiennent des informations très précises.

2.2. Gratuit avec Let's Encrypt

Let's Encrypt dans une initiative d'Internet qui propose des certificats gratuits reconnus partout dans le monde. La procédure est un peu complexe, car vous devez prouver que vous êtes propriétaire de votre domaine. En d'autres termes, Pwic.wiki doit déjà être configuré pour HTTP seul.

Nous utilisons le script proposé par diafygi, car il est open source, simple et auditable. Téléchargez le script et suivez les instructions du fichier readme. Si vous n'avez pas de reverse proxy, vous devez modifier le code spécifique PwicExtension.load_custom_routes de Pwic.wiki afin que Let's Encrypt puisse accéder aux fichiers cryptographiques dans un dossier statique spécial. Attention à ne pas exposer vos clés privées dans ce dossier.

À la fin, vous lisez ce genre de compte-rendu :

python3 acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir . > ./signed_chain.crt Parsing account key... Parsing CSR... Found domains: pwic.wiki Getting directory... Directory found! Registering account... Registered! Account ID: https://acme-staging-v02.api.letsencrypt.org/acme/acct/00000000 Creating new order... Order created! Verifying pwic.wiki... pwic.wiki verified! Signing certificate... Certificate signed!

Les fichiers finaux sont domain.key et signed_chain.crt. Le certificat expire sous 90 jours.

2.3. Payant avec des autorités

Ces certificats ont une grande valeur mais aussi un coût élevé (des dizaines d'euros par an). Ce n'est certainement pas le moyen le moins cher d'obtenir HTTPS si votre site web est petit.

Consultez simplement le site web des autorités et de leurs revendeurs pour en savoir plus sur les différentes possibilités de certifier votre domaine.

3. Activer HTTPS dans Pwic.wiki

Les fichiers .key et .crt doivent être déplacés respectivement à l'endroit indiqué par les variables PwicConst.PRIVATE_KEY et PwicConst.PUBLIC_KEY definies dans le fichier pwic_lib.py.

Mettez à jour l'option base_url pour utiliser HTTPS en lançant python3 pwic_admin.py set-env base_url https://your-site.tld par exemple.

3.1. Sans reverse proxy

C'est le comportement par défaut : Pwic.wiki écoute l'adresse 0.0.0.0 ou :: et traite toutes les requêtes.

L'option https doit être activée avec la commande : python3 pwic_admin.py set-env https X.

3.2. Avec un reverse proxy

L'intérêt d'utiliser un reverse proxy est expliqué dans notre FAQ technique.

Dans cette situation, Pwic.wiki communique avec le reverse proxy sur un réseau local restreint et vous n'avez pas besoin de HTTPS. Au contraire, le reverse proxy gère les connexions sécurisées avec le monde extérieur et il a besoin de votre certificat. Reportez-vous à la documentation de votre reverse proxy pour réaliser la configuration.

4. Ouvrez votre pare-feu

La dernière étape consiste à redémarrer Pwic.wiki et votre reverse proxy (si nécessaire).

Adaptez également les règles NAT de votre pare-feu : HTTP tourne sur le port 80 et HTTPS sur le port 443 par défaut.

Revision #1 was last modified by gitbra
on 2023-12-11 at 00:00:00 — 5a9d1be908df0a6d

🔝 Top of the page 🔝