Est-il possible de faire en sorte qu’Apache recharge un certificate SSL en utilisant PHP, sans access au shell?

Je viens de trouver Let’s Encrypt , tout en cherchant une alternative au fameux StartSSL, pour gérer mes certs DV SSL. Étant donné que les certificates LE sont de courte durée, j’aimerais automatiser le processus de renouvellement.

Je n’ai pas access au shell (juste cPanel), ni au support LE intégré de mon hébergeur, donc Certbot en mode manuel semble être la seule solution.

J’ai remarqué le répertoire /ssl/certs/ cPanel, contenant tous mes certs. Maintenant, je pense à un travail Cron pour exécuter un script PHP qui obtient de nouveaux certs et écrase ceux qui arrivent à expiration, mais je ne suis pas sûr que cela fonctionne, car je devrai faire qu’Apache recharge les certs écrasés. Est-ce possible, en utilisant PHP?

Obtenir manuellement le certificate

Avarie Letsencrypt dit : Nous ne recommandons pas cette option car cela prend du temps et vous devrez le répéter plusieurs fois par an à mesure que votre certificate expire. Pour la plupart des gens, il est préférable de demander le support Encrypter de votre fournisseur d’hébergement ou de changer de fournisseur s’ils ne prévoient pas de l’implémenter.

Dislaimer 2. Je n’ai pas réellement access à un serveur cPanel, donc je ne peux pas le tester. Il peut y avoir des erreurs. S’il vous plaît faites le moi savoir et je les corrigerai.

  1. Installez certbot sur votre ordinateur local
  2. Générez la réponse au défi:
    $ certbot certonly --manual -d example.com --test-cert --staging

    (Remarque: supprimer --test-cert --staging pour un certificate valide)

  3. Vous devriez alors voir quelque chose comme:

    Assurez-vous que votre serveur Web affiche le contenu suivant à l’ adresse http://example.com/.well-known/acme-challenge/VnHBr_PVGfhu-jdX0NCKrgAcCeC9A-HVqFjMOUAf24Y avant de continuer:

    VnHBr_PVGfhu-jdX0NCKrgAcCeC9A-HVqFjMOUAf24Y.0l4s1uvmfEFHST9EqeW_AnsdrM7GmE0joLEjRGruG-8

  4. Créez et téléchargez manuellement le fichier sur votre site Web si nécessaire
  5. Retournez sur votre ordinateur et appuyez sur Entrée pour continuer

Si tout s’est bien passé, vous devriez avoir un nouveau certificate SSL shiny.

Installer les fichiers de certificate du serveur SSL

  1. Connexion à cPanel
  2. Cliquez sur Gestionnaire SSL / TLS> Certificats (CRT)> Générer, afficher, télécharger ou supprimer des certificates SSL
  3. Dans la section Télécharger un nouveau certificate, cliquez sur le bouton Parcourir et recherchez votre fichier de certificate de serveur SSL. Je crois que cela devrait être /etc/letsencrypt/live/example.com/cert.pem
  4. Cliquez sur le bouton Télécharger.
  5. Cliquez sur le lien Précédent pour revenir au gestionnaire SSL / TLS.

Note: Je ne vois rien dans les instructions ci-dessus qui mentionnent quoi faire avec la clé privée, mais ce site mentionne un lien “Télécharger une nouvelle clé privée” quelque part. Là où vous voulez, vous voulez y placer votre clé privée.

Configurer le domaine

  1. Cliquez sur Gestionnaire SSL / TLS> Configurer un certificate SSL pour travailler avec votre site. Si cette option ne vous est pas disponible, votre FAI peut l’avoir désactivée et vous devrez les contacter pour terminer votre configuration SSL.
  2. Dans le menu déroulant Domaine, sélectionnez le domaine qui utilisera le certificate SSL. Le système tentera de récupérer le certificate SSL et la clé privée correspondante.
  3. Ouvrez la clé intermédiaire Letsencrypt ( /etc/letsencrypt/live/example.com/fullchain.pem ) dans le Bloc-notes ou un autre éditeur de texte simple (pas Word). Copiez et collez tout le contenu de ce fichier dans la zone Ca Bundle (CABUNDLE).
  4. Cliquez sur Installer le certificate. Vous devriez recevoir un message indiquant que le certificate a été installé avec succès. Si vous recevez une erreur, vous devrez peut-être contacter votre fournisseur d’hébergement Web pour obtenir une assistance supplémentaire.

Une fois les certificates installés, cPanel doit redémarrer / recharger le serveur Web pour que le certificate soit actif.

Adapté d’ ici .

Il y a deux problèmes à résoudre ici. Tout d’abord, comment obtenir le certificate. Et deuxièmement, comment configurer le serveur Web pour l’utiliser. Pour les deux, j’ai deux solutions différentes pour vous.

Utiliser un ordinateur avec un access shell pour orchestrer

Disons que vous installez certbot sur votre propre ordinateur. Disons également que vous avez un access SFTP à votre espace Web. Vous pouvez utiliser sshfs pour monter cet espace Web et utiliser certbot pour automatiser l’obtention d’un certificate:

 #!/bin/sh domain='example.org' mkdir -p "/tmp/$domain" sshfs "$domain:" "/tmp/$domain" -o nonempty /opt/certbot/certbot-auto certonly --webroot -w "/tmp/$domain/public_html" -d "$domain" # or later: #/opt/certbot/certbot-auto renew umount "/tmp/$domain" 

Vous avez maintenant obtenu ou renouvelé le certificate. Vous pouvez utiliser l’API Cpanel pour l’installer sur le serveur:

 domain='example.org' ledir="/etc/letsencrypt/live/$domain" cabundle="$ledir/chain.pem" crt="$ledir/cert.pem" key="$ledir/privkey.pem" cpanel_host='cpanel.example.com:2083' cpanel_user='' curl -u "$cpanel_user"\ "$cpanel_host/json-api/cpanel?cpanel_jsonapi_apiversion=2&cpanel_jsonapi_module=SSL&cpanel_jsonapi_func=installssl&cpanel_jsonapi_user=$cpanel_user"\ -d "domain=$domain" --data-urlencode "cabundle@$cabundle" --data-urlencode "crt@$crt" --data-urlencode "key@$key" 

Si vous utilisez votre propre ordinateur de bureau, cette solution n’est probablement pas complètement automatisée. J’aime cette solution, car vous n’avez pas besoin de stocker le mot de passe admin pour le compte Cpanel sur le serveur Web. Vous gardez également le contrôle sur le processus d’obtention de certificate et les clés.

Utiliser le client ACME de l’espace utilisateur sur le serveur

Il y a acme.sh et il y a Acme PHP et d’autres qui vous permettent d’obtenir le certificate du serveur. Mon fournisseur d’hébergement me permet d’exécuter des tâches cron afin que je puisse exécuter acme.sh pour obtenir des certificates. Je ne suis pas sûr de pouvoir accéder à l’outil de ligne de commande uapi de uapi . Sinon, vous pouvez utiliser une application PHP pure avec le support libcurl pour utiliser le même appel API que ci-dessus pour installer le certificate. Cela serait complètement automatisé, mais je ne l’ai pas encore testé.