Je fais mon travail de développement sur une machine virtuelle Ubuntu 16.04
Comme je travaille sur un certain nombre de projets, pour me faciliter la vie, j’utilise VirtualDocumentRoot et le fichier hosts sur les sites de serveur à partir de mon dossier de départ en utilisant les domaines * .dev:
En 000-default.conf j’ai:
VirtualDocumentRoot /home/steve/websites/%-2/%-2/public_html ServerAlias *.dev
alors dans les hôtes j’ai les différents sites sur lesquels je travaille:
127.0.0.1 somesite.dev 127.0.0.1 another.dev 127.0.0.1 athirdone.dev 127.0.0.1 blog.athirdone.dev
De cette façon, lorsque j’ajoute un nouveau projet, il me suffit de créer la structure de dossiers appropriée dans le répertoire des sites Web et d’append une ligne aux hôtes, par exemple si je souhaite travailler sur un nouveau projet, somecoolproject.dev.
/home/steve/websites/somecoolproject/somecoolproject/public_html
et une ligne dans les hôtes:
127.0.0.1 somecoolproject.dev
Et je vais bien.
Quoi qu’il en soit, à peu près tout ce que je travaille fonctionne maintenant sur https, et beaucoup de projets ont du code pour l’appliquer, que ce soit dans le code source ou htaccess, etc.
Je voudrais créer un certificate auto-signé sur ma machine de développement, et idéalement d’une manière que je n’ai pas besoin d’en générer un nouveau pour chaque projet, donc une sorte de caractère générique * .dev serait génial.
Mais même si je dois en créer un pour chaque projet, je n’arrive toujours pas à comprendre comment l’installer avec ma configuration – tout ce que je trouve suppose un document fixe et un nom de serveur codé en dur.
Si je comprends bien les exigences, vous voulez savoir:
Si j’ai bien compris cela, c’est certainement faisable.
Comment cela fonctionnera-t-il : indication du nom du serveur SNI, extension du protocole TLS dans laquelle le nom d’hôte est transmis lors de l’établissement de la connexion TLS, alors que les données HTTP (telles que l’en-tête de l’hôte) sont disponibles. Tous les navigateurs Web populaires, curl, tous les serveurs Web populaires le supportent.
Pas:
Premier. Générez le cert:
mindaugas@mindaugas-ubuntu-14:/usr/local/apache2/conf$ sudo openssl req -newkey rsa:2048 -nodes -keyout domain.key -x509 -days 365 -out domain.crt Generating a 2048 bit RSA private key .............+++ ..................+++ writing new private key to 'domain.key' ----- You are about to be asked to enter information that will be incorporated into your certificatee request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg server FQDN or YOUR name) []:*.dev Email Address []:
La partie clé est la suivante:
Common Name (eg server FQDN or YOUR name) []:*.dev
Seconde.
Configuration du serveur:
Listen 443 SSLEngine on SSLCertificateFile "/usr/local/apache2/conf/domain.crt" SSLCertificateKeyFile "/usr/local/apache2/conf/domain.key" VirtualDocumentRoot /home/mindaugas/websites/%-2/pubic/ ServerAlias *.dev Options Indexes FollowSymLinks MultiViews AllowOverride All Allow from All Require all granted
Activez ssl et redémarrez apache:
sudo a2enmod ssl sudo service apache2 restart
Vous pouvez tester ceci par:
Nous aimons les primes car c’est un peu long d’écrire la solution pour vous 🙂 La vraie réponse à votre question est de savoir comment la faire fonctionner, alors que VirtualDocumentRoot ne fonctionnera pas en SSL. Je suggère de proxy les demandes de l’hôte virtuel SSL par défaut, à l’hôte virtuel non-ssl dynamic. Ceci est possible en conservant le nom d’hôte demandé.
Tout d’abord, faites tout le travail préliminaire: 1 / générez votre clé privée et votre certificate (un joker si vous le voulez), il y a beaucoup de tutoriels pour cela, 2 / dans votre httpd.conf principal, vous activez le ssl.conf
Dans le httpd-ssl.conf, vous avez besoin de cette conf (je l’ai testée avec succès):
UseCanonicalName Off ProxyPreserveHost On SetEnvIf Server_Addr "(.*)" sname=$1 RewriteEngine On RewriteCond "%{HTTPS}" =on RewriteRule ^/(.*)$ "http://%{ENV:sname}:80/$1" [P]
Je suggère également de personnaliser le format du journal, puis vous voyez mieux ce qui est demandé. Cela facilitera le débogage ultérieur, et voici quelques directives pour vous connecter avec le nom d’hôte demandé, et vous pouvez reconnaître le trafic SSL ou non SSL par la longueur des lignes de journal. Dans httpd.conf, recherchez l’endroit où le LogFormat est défini et ajoutez:
LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" enhanced LogFormat "%V %h %l %u %t \"%r\" %>s %b" enhancedSSL CustomLog "logs/access_log" enhanced
dans httpd-ssl.conf, vous avez juste besoin de celui-ci:
CustomLog "logs/access_log" enhancedSSL
Dites-nous si cela fonctionne comme prévu. Une fois le travail effectué, l’étape suivante consiste probablement à désactiver le trafic non-SSL au moins depuis la télécommande. Pour ce faire, configurez le pare-feu local pour qu’il bloque les requêtes sur le port 80 ou (mieux) configurez VirtualHost pour qu’il n’écoute que localement (VirtualHost 127.0.0.1:80 au lieu de *: 80).