OVH Cloud OVH Cloud

[gentoo-user-fr] Activation SSL sur apache2

13 réponses
Avatar
Christophe Garault
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Bonsoir,

j'essaye désespérément d'activer SSL sur mon serveur Apache2 mais sans
grand succès. Voici donc les étapes que j'ai suivies:

1) création du certificat et de la clé et copie dans le répertoire ssl
2) modification d'un hôte virtuel (qui fonctionne bien en http) en lui
ajoutant les directives suivantes:
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/apache2/conf/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/conf/ssl/server.key
3) dans la directive Directory correspondante, ajout de
SSLRequireSSL
4) redémarrage d'Apache2

Lorsque je tente de me connecter avec un browser j'ai des messages
d'erreur qui varient en fonction du navigateur.
Quand je me connecte à l'aide d'openssl avec: 'openssl s_client
- -connect localhost:443' je vois bien passer le handshake SSL mais si
je fais un GET / HTTP/1.1 puis le Host correspondant, j'ai le droit à
un beau 403 Forbidden.

L'un d'entre vous, aurait-il une idée pour me sortir de là?

Merci de m'avoir lu jusqu'ici.

- --
Christophe Garault
Take your marks:
Gen too three: Emerge!

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)

iD8DBQFDd52nJ5Nh3YMYAQsRAnN5AJ9y2XYusX8YuPgI6o5wnYLCFzSC9ACeKGmj
NFUJE7V8r7GZLbhSprwV8vY=
=9+P7
-----END PGP SIGNATURE-----

--
gentoo-user-fr@gentoo.org mailing list

10 réponses

1 2
Avatar
Yoann Pannier
Christophe Garault wrote, On 11/13/2005 09:10 PM:
j'essaye désespérément d'activer SSL sur mon serveur Apache2 mais sans
grand succès. Voici donc les étapes que j'ai suivies:



Rien dans les logs d'erreur d'apache (au démarrage ou/et plus tard) ?

--
Yoann Pannier
--
mailing list
Avatar
joris
Salut,

dans ton /etc/conf.d/apache2 il faut explicitement activer SSL




2005/11/14, Yoann Pannier :
Christophe Garault wrote, On 11/13/2005 09:10 PM:
> j'essaye désespérément d'activer SSL sur mon serveur Apache2 mais sans
> grand succès. Voici donc les étapes que j'ai suivies:

Rien dans les logs d'erreur d'apache (au démarrage ou/et plus tard) ?

--
Yoann Pannier
--
mailing list






--

(oO)
/||
CTHULU FOR PRESIDENT!!

--
mailing list
Avatar
Christophe Garault
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Yoann Pannier a écrit :

Rien dans les logs d'erreur d'apache (au démarrage ou/et plus tard) ?



Rien dans ssl_access_log ni dans ssl_error_log ou ssl_request_log. Par
contre, dans /var/log/apache2/access_log j'ai quand même ceci:

www.garault.com 192.168.0.2 - - [14/Nov/2005:21:42:16 +0100]
"x80gx01x03x01" 200 8635 "-" "-" VLOG=/var/log/apache2/garault.com
www.garault.com 192.168.0.2 - - [14/Nov/2005:21:42:17 +0100]
"x80gx01x03" 200 8574 "-" "-" VLOG=/var/log/apache2/garault.com

Il se trouve que le vhost que j'essaye d'accéder n'est pas garault.com
mais garault.org. J'ai dû faire une boulette quelque part. (enfin les
2 domaines sont installés)

Un netstat -npl me montre bien le port 443 ouvert mais sur l'adresse
0.0.0.0 je me demande si cela peut avoir une incidence? Je vais tenter
de modifier l'adresse d'écoute dans le 40_mod_ssl.conf pour voir, mais
je pense m'être gouru ailleurs. Je ne peux pas réinstaller apache
maintenant mais c'est dans la todolist car j'ai quelques trains de
retard et l'ebuild de ma version (2.0.52-r1) n'est même plus dans
l'arbre (Debian c'est bien des fois ;-)

ps pour Joris: oui le -D SSL est bien actif sinon je n'aurai même pas
pu tester le handshake avec openssl.

Bonne soirée.

- --
Christophe Garault
Take your marks:
Gen too three: Emerge!




-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)

iD8DBQFDePo5J5Nh3YMYAQsRAkqdAJ9z7S/6SfhRUjWb2IKgy1vgyVjPRQCfT2ZL
BmY2wOjIrKD7GNkuQehavSk =d+kN
-----END PGP SIGNATURE-----

--
mailing list
Avatar
Yoann Pannier
Christophe Garault wrote, On 11/14/2005 09:57 PM:
Rien dans ssl_access_log ni dans ssl_error_log ou ssl_request_log. Par
contre, dans /var/log/apache2/access_log j'ai quand même ceci:



et dans error_log ?

je pense a un problème sur le certificat lui-même, genre je crois qu'une
clé en lecture/ecriture invalide le certificat, par exemple (vague
souvenir).

Il se trouve que le vhost que j'essaye d'accéder n'est pas garault.com
mais garault.org. J'ai dû faire une boulette quelque part. (enfin les
2 domaines sont installés)



Mmmm, j'ai cru lire dans ton mail original que tu avais /modifié/ un
vhost HTTP éxistant... as-tu jeté un oeil dans
/etc/apache2/conf/modules.d/41_mod_ssl.default-vhost.conf ?

Je ne suis pas sûr de l'état de ce fichier par défaut, mais je pense
qu'il défini un vhost _default_:443 d'office dès que SSL est activé : il
y a peut-être confusionnage ici pour apache (un seul vhost SSL par IP).

Un netstat -npl me montre bien le port 443 ouvert mais sur l'adresse
0.0.0.0 je me demande si cela peut avoir une incidence?



Je crois pas.

--
Yoann Pannier
--
mailing list
Avatar
Christophe Garault
Yoann Pannier a écrit :

et dans error_log ?




Rien à part tous les zozios qui veulent exécuter un cmd.exe... ;)

je pense a un problème sur le certificat lui-même, genre je crois qu'une
clé en lecture/ecriture invalide le certificat, par exemple (vague
souvenir).




Ok, je vais essayer de trouver cette info, mais pourtant le handshake
SSL se passe bien.

Mmmm, j'ai cru lire dans ton mail original que tu avais /modifié/ un
vhost HTTP éxistant... as-tu jeté un oeil dans
/etc/apache2/conf/modules.d/41_mod_ssl.default-vhost.conf ?

Je ne suis pas sûr de l'état de ce fichier par défaut, mais je pense
qu'il défini un vhost _default_:443 d'office dès que SSL est activé : il
y a peut-être confusionnage ici pour apache (un seul vhost SSL par IP).




Oulà, j'ai lu près de 100 pages de doc sur SSL et je ne suis même pas
tombé sur cette info! Il n'y a donc qu'un seul vhost possible par IP en
SSL? Si c'est effectivement le cas, ça explique tout en effet car il y
en a bien un de définit par défaut dans le fichier que tu mentionne (il
y a même un bug à ce sujet: 100624 et une correction dans le CVS avec
l'ajout de SSL_DEFAULT_VHOST)
Bon je vais ressortir mon vieil O'Reilly car visiblement mes lectures
(série d'articles dans securityfocus) n'ont pas été très saines.
Merci pour ton aide, je vais tenter de mettre ça au point aujourd'hui.

Bonne journée.

--
leToff


--
mailing list
Avatar
Anonyme
Bonjour leToff,

CG> Il n'y a donc qu'un seul vhost possible par IP en
CG> SSL? Si c'est effectivement le cas, ça explique tout en effet car il y
CG> en a bien un de définit par défaut dans le fichier que tu mentionne (il
CG> y a même un bug à ce sujet: 100624 et une correction dans le CVS avec
CG> l'ajout de SSL_DEFAULT_VHOST)

En effet, la négociation SSL se fait sur la base de l'adresse IP de la
machine. En fait, ce n'est pas qu'il n'y a qu'un VHost, c'est surtout
que Http+SSL ne gère pas les VHost. En gros, il n'y a pas de prise en
compte du VHost (ServerName) : le dernier VHost défini doit avoir
priorité sur les autres je suppose.

La seule solution si tu as plusieurs VHost, c'est d'avoir plusieurs
IPs à disposition et que tu en attribues une par VHost. Ensuite, tu
définis ton VHost en utilisant cette IP (exemple : <VirtualHost 1.2.3.4:443>)

Sinon, une bidouille consiste à "masquer" la partie SSL de tes
différents VHost via des frames, qui pointent vers ton seul VHost en
SSL. C'est peut-être pas très "propre", mais ca peut te permettre de
te dépatouiller.

CG> Bonne journée.

A toi aussi :)

Cordialement,

--
Anonyme

--
mailing list
Avatar
Christophe Garault
Anonyme a écrit :

En effet, la négociation SSL se fait sur la base de l'adresse IP de la
machine. En fait, ce n'est pas qu'il n'y a qu'un VHost, c'est surtout
que Http+SSL ne gère pas les VHost. En gros, il n'y a pas de prise en
compte du VHost (ServerName) : le dernier VHost défini doit avoir
priorité sur les autres je suppose.




Bonsoir Benjamin,

Désolé, je répond un peu tardivement car j'ai eu d'autres projets sur le
feu. Ceci dit j'ai eu le temps de relire à fond le paragraphe sur SLL
dans le O'Reilly et j'avoue être un peu perdu pour le coup. En effet
certaines directives (SSLEngine par ex) s'appliquent dans les hôtes
virtuels. Je comprend tout à fait que la négociation SSL se fasse sur
l'IP comme tu le mentionnes, mais dans ce cas je devrais alors juste
avoir un pb de certificat non? Puisque le certificat est global au
serveur (donc l'IP) et ne correspond pas forcément à l'hôte virtuel...
Enfin, j'ai finalement à peu près réussi à faire ce que je voulais en
virant mon hôte virtuel du fichier vhosts et en définissant les
paramètres dans le fichier 41_mod_ssl.default-vhost.conf. Oui je sais:
c'est *très* sale mais ce n'est que temporaire car je suis encore en
Apache 2.0.52-r1 et n'ai donc pas encore migré vers la nouvelle
architecture Gentoo. Il y a cependant encore 2 ou 3 petites choses qui
me chagrinent:

- si dans ce fichier je laisse _default_:443 rien ne fonctionne
correctement.
- si je remplace _default_ par 192.168.0.11 celà fonctionne bien mais au
démarrage du serveur j'ai la petite erreur suivante à laquelle je ne
comprend rien:

---------------------------------------------------------------
Marge modules.d # /etc/init.d/apache2 restart
* Stopping apache2 ...
[Wed Nov 23 19:06:50 2005] [error] VirtualHost 192.168.0.11:443 --
mixing * ports and non-* ports with a NameVirtualHost address is not
supported, proceeding with undefined
results
[ ok ]
* Starting apache2 ...
Apache/2.0.52 mod_ssl/2.0.52 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.

Server mail.garault.org:443 (RSA)
Enter pass phrase:

Ok: Pass Phrase Dialog
successful.
[ ok ]
Marge modules.d #
---------------------------------------------------------------

Et voici le paragraphe qui correspond dans mon 41_mod_SSL_blabla.conf

<VirtualHost 192.168.0.10:443>

# General setup for the virtual host

DocumentRoot "/usr/share/webapps/squirrelmail/1.4.5/htdocs"
#ServerName localhost:443
ServerName mail.garault.org:443
#ServerAdmin
ErrorLog logs/ssl_error_log

Une petite idée? En tous cas merci de m'avoir lu jusqu'ici.

Bonne soirée.

--
Christophe Garault
Take your marks:
Gen too three: Emerge!

--
mailing list
Avatar
Yoann Pannier
Christophe Garault wrote, On 11/23/2005 07:35 PM:
certaines directives (SSLEngine par ex) s'appliquent dans les hôtes
virtuels. Je comprend tout à fait que la négociation SSL se fasse sur
l'IP comme tu le mentionnes, mais dans ce cas je devrais alors juste
avoir un pb de certificat non? Puisque le certificat est global au
serveur (donc l'IP) et ne correspond pas forcément à l'hôte virtuel...



Comment ça global au serveur ? Les certificats sont déclarés à
l'interieur d'un vhost, non?

Je crois (dur) qu'Apache reçoit la requete cryptée, choisi un vhost en
fonction de l'IP cible (puisque c'est la seule info lisible à ce moment
là), et utilise le certificat correspondant pour le biniou ssl.

Si c'est un mauvais vhost qui est choisi (genre tu as 2 vhosts SSL sur
une seule IP : c'est le premier déclaré qui correspond qui est prit),
alors si tout ce passe bien, tu as une erreur de certificat au niveau du
client (par ce qu'il ne correspondra pas au nom de domaine). Mais si ce
premier vhost est mal configuré (ou pas du tout comme c'etait le cas
pour ton _default_:443), j'imagine que ça plante comme tu as pu le voir.

[Wed Nov 23 19:06:50 2005] [error] VirtualHost 192.168.0.11:443 --
mixing * ports and non-* ports with a NameVirtualHost address is not
supported, proceeding with undefined
results
[ ok ]



Est-ce que tu n'aurais pas qq part un nom:* (ou peut-être bien un nom
tout court?) qui pourrait se remplacer par un nom:80, par exemple ?

A priori si dans /etc/apache2/conf/vhosts/vhosts.conf tu as un
'NameVirtualHost truc:80' et des <VirtualHost truc:80>, le _default_:443
ne devrait pas poser de problème.

* Starting apache2 ...
Apache/2.0.52 mod_ssl/2.0.52 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.



En option :
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#removepassphrase

--
Yoann Pannier
--
mailing list
Avatar
Yoann Pannier
Yoann Pannier wrote, On 11/23/2005 09:27 PM:
* Starting apache2 ...
Apache/2.0.52 mod_ssl/2.0.52 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide us with the pass phrases.




En option :
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#removepassphrase



Pour info, la demande de password d'apache ne bloque pas, au moins en
partie, ta machine lors du boot ??

--
Yoann Pannier
--
mailing list
Avatar
Christophe Garault
Yoann Pannier a écrit :

Comment ça global au serveur ? Les certificats sont déclarés à
l'interieur d'un vhost, non?




Pas forcément. En l'occurrence j'ai choisi de le laisser dans le fichier
41_mod_ssl_bla.conf puisque c'est là qu'il était par défaut.
La doc indique que le contexte est soit server config, soit virtual host.
Mais comme on ne peut avoir qu'un certificat par IP...

Je crois (dur) qu'Apache reçoit la requete cryptée, choisi un vhost en
fonction de l'IP cible (puisque c'est la seule info lisible à ce moment
là), et utilise le certificat correspondant pour le biniou ssl.




Justement, les docs ne sont pas très claires sur le sujet. Il m'apparaît
évident que la directive SSLEngine joue le rôle d'arbitre lorsqu'il y a
des vhost en SSL et d'autres non. En tous cas je ne saurais pas comment
faire avec plusieurs vhosts en SSL sur une seule IP.

Si c'est un mauvais vhost qui est choisi (genre tu as 2 vhosts SSL sur
une seule IP : c'est le premier déclaré qui correspond qui est prit),




Je te crois sur parole! ;-)

alors si tout ce passe bien, tu as une erreur de certificat au niveau du
client (par ce qu'il ne correspondra pas au nom de domaine). Mais si ce
premier vhost est mal configuré (ou pas du tout comme c'etait le cas
pour ton _default_:443), j'imagine que ça plante comme tu as pu le voir.




Mouaif. Tout ça n'est pas encore suffisamment clair pour moi.

[Wed Nov 23 19:06:50 2005] [error] VirtualHost 192.168.0.11:443 --
mixing * ports and non-* ports with a NameVirtualHost address is not
supported, proceeding with undefined
results
[ ok ]





Est-ce que tu n'aurais pas qq part un nom:* (ou peut-être bien un nom
tout court?) qui pourrait se remplacer par un nom:80, par exemple ?




Justement, à part l'hôte en SSL, tous les autres étaient comme ceci:

<VirtualHost 192.168.0.11>
Servername w3.garault.org
ServerAdmin
DocumentRoot /var/www/localhost/rigolo
Setenv VLOG /var/log/apache2/video
</VirtualHost>

Dès que j'ai indiqué explicitement le port d'écoute dans la directive
VirtualHost j'ai décuplé le nombre de messages d'erreur! ;-)

A priori si dans /etc/apache2/conf/vhosts/vhosts.conf tu as un
'NameVirtualHost truc:80' et des <VirtualHost truc:80>, le _default_:443
ne devrait pas poser de problème.




Ah ben voilà! Je n'avais justement qu'un NameVirtualHost 192.168.0.11
sans le port d'écoute!
Je tente et....suspense.... BINGO ! En plus c'est page 94 de mon
bouquin. Merci Yoann ! :-)

En option :
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#removepassphrase




Merci, c'est prévu aussi mais il faut comprendre que je 'découvre' SSL
et j'ai un peu tout fait dans l'urgence. Il faut encore que je lise
quelques infos pour bien comprendre ces histoires de format (PEM et
autres) des clés et certificats. En tous cas je suis content, j'ai un
/beau/ Squirrelmail en SSL maintenant. Reste plus qu'à poster une ou
deux questions au sujet de ce dernier....

Encore merci.

--
Christophe Garault
Take your marks:
Gen too three: Emerge!



--
mailing list
1 2