Conditions préalables
- Un serveur Vultr fonctionnant sous Arch Linux à jour (voir cet article .)
- Un serveur Web en cours d'exécution, Apache ou Nginx
- Accès Sudo
- Les commandes devant être exécutées en tant que root sont préfixées par
#, et celles qui peuvent être exécutées en tant qu'utilisateur normal par $. La façon recommandée d'exécuter des commandes en tant que root est, en tant qu'utilisateur normal, de préfixer chacune d'elles avec sudo.
- Ayez un éditeur de texte installé et familiarisez-vous avec lui, comme vi, vim, nano, emacs ou un autre éditeur similaire.
Service sécurisé via HTTPS
La diffusion de contenu via HTTPS peut utiliser un cryptage extrêmement puissant, de sorte que personne n'interceptant le trafic entre l'utilisateur et le serveur Web ne peut le lire. Il crypte non seulement le trafic lui-même, mais également l'URL à laquelle vous accédez, ce qui peut autrement exposer des informations. Depuis un certain temps, Google détermine en partie le classement des recherches en fonction du fait qu'une page utilise HTTPS, dans le cadre de l'initiative HTTPS Everywhere.
Remarque : une recherche DNS expose le nom de domaine auquel se connecter, mais l'URL entière n'est pas exposée pendant ce processus.
Obtenir un certificat SSL / TLS
Techniquement, TLS a remplacé SSL pour les certificats HTTPS, mais, la plupart des endroits ont simplement continué d'appeler les certificats TLS par le terme plus populaire de certificats SSL. Après une utilisation courante, ce guide fera de même.
Pour utiliser HTTPS, votre serveur Web a besoin d'une clé privée ( .key) pour pouvoir l'utiliser en privé, et d'un certificat ( .crt) pour partager publiquement qui inclut une clé publique. Un certificat doit être signé. Vous pouvez le signer vous-même, mais les navigateurs modernes se plaindront de ne pas reconnaître le signataire. Par exemple, Chrome affiche: Your connection is not private. Attackers might be trying to steal your information... NET::ERR_CERT_AUTHORITY_INVALID. Si seul un groupe privé de personnes utilise le site Web, cela peut être acceptable, car les navigateurs permettront de procéder. Par exemple, sur Chrome, cliquez sur "Avancé", puis sur "Passer à ... (dangereux)"; il affichera toujours "Non sécurisé" et biffera le "https".
Notez que ce processus vous demandera votre pays, état / providence, localité, organisation, unité organisationnelle et noms communs, et votre adresse e-mail; le tout est accessible dans le navigateur de quiconque se connecte à votre site via HTTPS.
Notez également que si vous donnez des certificats d'hôtes virtuels, vous devrez donner des noms de fichiers distincts ci-dessous et les pointer dans vos configurations d'hôte virtuel.
Accédez au répertoire approprié pour votre serveur Web.
Si vous avez installé Apache:
$ cd /etc/httpd/conf
Si vous avez installé Nginx:
$ cd /etc/nginx
Une fois dans le répertoire approprié, générez une clé privée ( server.key) et un certificat auto-signé ( server.crt):
# openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 825
Définissez des autorisations en lecture seule et autorisez uniquement la lecture de la clé privée par root:
# chmod 400 server.key
# chmod 444 server.crt
Vous pouvez également obtenir un certificat signé par une autorité de certification approuvée. Vous pouvez payer différentes sociétés (autorités de certification) pour signer votre certificat à votre place. Lors de l'examen des autorités de certification, il peut être important de rechercher quels navigateurs et quelles versions les reconnaîtront. Certaines autorités de certification plus récentes peuvent ne pas être reconnues comme étant plus officielles qu'un certificat auto-signé sur les anciennes versions de navigateur.
Vous avez généralement besoin non seulement d'une adresse IP publique, mais également d'un nom de domaine. Certaines autorités de certification peuvent délivrer un certificat à une adresse IP publique, mais cela se fait rarement.
De nombreux fournisseurs proposent un essai gratuit de 30 jours, ce qui est recommandé pour commencer afin que vous puissiez vous assurer que le processus fonctionne pour vous avant de payer. Les prix peuvent varier de quelques dollars par an à des centaines, selon le type et les options tels que plusieurs domaines ou sous-domaines. Un certificat standard indiquera seulement que l'autorité de signature a vérifié que la personne qui obtient le certificat peut apporter des modifications sur le domaine. Un certificat de validation étendue indiquera également que le signataire a effectué une vérification diligente du demandeur et affichera, dans les navigateurs modernes, une barre verte dans ou près de l'URL. Lors de la vérification que vous pouvez apporter des modifications au domaine, certaines autorités de signature vous demanderont de recevoir des e-mails à une adresse de sondage importante du nom de domaine, telle que[email protected]. Beaucoup offrent une vérification alternative, comme vous donner un fichier à placer sur votre serveur, comme placer leur fichier dans /srv/http/.well-known/pki-validation/Apache ou /usr/share/nginx/html/.well-known/pki-validation/Nginx, pour les configurations de répertoire d'hébergement unique; ou en créant temporairement une entrée CNAME qu'ils vous fournissent dans les enregistrements DNS de votre domaine.
L'autorité de signature que vous choisissez peut avoir des étapes légèrement différentes, mais la plupart accepteront la procédure suivante:
Dans le répertoire approprié, générez une clé privée ( server.key):
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out server.key
Définissez la clé privée en lecture seule, uniquement par root:
# chmod 400 server.key
Générez une demande de signature de certificat ( server.csr). Vous devez mettre votre nom de domaine quand il vous le demande Common Nameet vous pouvez laisser le mot de passe du challenge vide:
# openssl req -new -sha256 -key server.key -out server.csr
Définissez la demande de signature de certificat en lecture seule, uniquement par root:
# chmod 400 server.csr
Affichez le contenu de la demande de signature de certificat. Ces informations sont encodées en base64, elles ressembleront donc à des caractères aléatoires:
# cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
.....
-----END CERTIFICATE REQUEST-----
Passez par le processus de votre autorité de signature, et lorsque vous êtes invité à coller dans votre CSR, copiez et collez tout ce fichier, y compris les -----lignes. Selon l'autorité de signature que vous avez choisie et le type de certificat, ils peuvent immédiatement vous remettre le certificat signé, ou cela peut prendre plusieurs jours. Une fois qu'ils vous ont donné le certificat signé, copiez-le (y compris les lignes -----BEGIN CERTIFICATE-----et -----END CERTIFICATE-----) dans un fichier nommé server.crt, dans le répertoire approprié, indiqué ci-dessus pour votre serveur Web, et définissez-le en lecture seule:
# chmod 444 server.crt
Si vous utilisez un pare-feu, vous devrez activer le trafic TCP entrant vers le port 443.
Pour Apache
Modifiez /etc/httpd/conf/httpd.confet décommentez ces lignes:
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf
Notez que si vous utilisez des hôtes virtuels, la modification ci-dessus /etc/httpd/conf/httpd.confutilisera le même certificat sur tous les hôtes. Pour donner à chaque hôte son propre certificat pour éviter que les navigateurs ne se plaignent que le certificat ne correspond pas au nom de domaine, vous devez modifier chacun de leurs fichiers de configuration /etc/httpd/conf/vhosts/pour pointer vers son propre certificat et sa propre clé privée:
- Remplacez
<VirtualHost *:80>par <VirtualHost *:80 *:443>.
-
Dans la VirtualHostsection, ajoutez les éléments suivants:
SSLEngine on
SSLCertificateFile "/etc/httpd/conf/YOUR-DOMAIN-NAME.com.crt"
SSLCertificateKeyFile "/etc/httpd/conf/YOUR-DOMAIN-NAME.com.key"
Redémarrez Apache:
# systemctl restart httpd
Pour Nginx
Modifiez /etc/nginx/nginx.confet près du bas, décommentez la HTTPS serversection et modifiez les lignes comme suit:
ssl_certificate server.crt;
ssl_certificate_key server.key;
root /usr/share/nginx/html;
Notez que si vous utilisez des hôtes virtuels, la modification ci-dessus /etc/nginx/nginx.confenverra tous les hôtes à cet emplacement. Pour donner à chaque hôte son propre certificat, vous devez modifier chacun de leurs fichiers de configuration /etc/nginx/sites-enabled/afin d'avoir un bloc serveur supplémentaire pour pointer vers son propre certificat et sa propre clé privée:
server {
listen 443 ssl;
server_name YOUR-DOMAIN-NAME.com;
ssl_certificate YOUR-DOMAIN-NAME.com.crt;
ssl_certificate_key YOUR-DOMAIN-NAME.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/YOUR-DOMAIN-NAME.com;
index index.html index.htm;
}
}
Redémarrez Nginx:
# systemctl restart nginx