GNU/Linux >> Tutoriels Linux >  >> Panels >> Panels

Comment activer plusieurs sites HTTPS pour une adresse IP sur Debian Etch à l'aide d'extensions TLS

Comment activer plusieurs sites HTTPS pour une adresse IP sur Debian Etch à l'aide de TLS Extensions

Ce guide est spécifique à Debian mais pourrait être porté sur d'autres distributions car le concept est le même. , certains navigateurs internet ne fonctionneront pas donc le serveur apache2 ne fournira que le site par défaut comme le fait http 1.0 sur un serveur http 1.1.

Ce tutoriel suppose que vous avez suivi le perfect_setup_debian_etch jusqu'à la fin.

1. Préparation du pbuilder

Installez pbuilder.

apt-get update
apt-get install pbuilder fakeroot sudo devscripts apt-utils

Modifiez ensuite /etc/pbuilder/pbuilderrc à la ligne 11 pour refléter un site le plus proche de vous. C'est le site qu'apt utilisera pour résoudre les dépendances.

MIRRORSITE=http://http.us.debian.org/debian

Dans le même fichier, allez à la ligne 20 et définissez DISTRIBUTION=etch

Créez enfin votre image pbuilder.

pbuilder create --distribution etch

2. Patcher et recompiler apache2.

Nous devons d'abord créer un répertoire pour stocker les sources et les télécharger.

mkdir /usr/src/apache2
cd /usr/src/apache2
apt-get source apache2

Copiez et enregistrez ce correctif dans /usr/src/apache2/apache2-2.2.3/httpd-2.2.3-sni.patch

cat> /usr/src/apache2/apache2-2.2.3/httpd-2.2.3-sni.patch
httpd-2.2.3-sni.patch - prise en charge de l'indication du nom du serveur pour Apache 2.2 (voir RFC 4366, "Transport Layer Security (TLS) Extensions" )basé sur un patch du projet EdelKey(http://www.edelweb.fr/EdelKey/files/apache-2.2.0+0.9.9+servername.patch)Nécessite openssl-SNAP-20060330 / openssl-0.9.8 -stable-SNAP-20070813 ou ultérieurpour fonctionner correctement (ftp://ftp.openssl.org/snapshot/). La branche 0.9.8 doit être configurée explicitement pour la prise en charge de l'extension TLS au moment de la compilation (""./config enable-tlsext").Index :httpd-2.2.x/modules/ssl/ssl_engine_init.c==================================================================--- httpd-2.2.x/modules/ssl/ssl_engine_init.c (révision 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_init.c (copie de travail)@@ -156,6 +156,87 @@ retour OK ; } +#ifndef OPENSSL_NO_TLSEXT+static int set_ssl_vhost(void *servername, conn_rec *c, server_rec *s) +{+ SSLSrvConfigRec *sc;+ SSL *ssl;+ BOOL trouvé =FALSE;+ apr_array_header_t *names;+ int i;+ + /* check ServerName */+ if (!strcasecmp(servername, s->server_hostname))+ found =TRUE;++ /* s'il n'y a pas encore de correspondance, vérifie les entrées ServerAlias ​​*/+ if (!found) {+ names =s->names;+ if (names) {+ char **name =(char **) names->elts;+ for (i =0; i nelts; ++i) {+ if(! name[i]) continue;+ if (!strcasecmp(servername, name[i])) {+ found =TRUE;+ break;+ }+ }+ }+ }++ /* s'il n'y a toujours pas de correspondance, vérifiez les entrées ServerAlias avec des jokers */+ if (!found) {+ names =s->wild_names;+ if (names) {+ char **name =(char **) names->elts;+ for (i =0; i nelts ; ++i) {+ if(!nom[i ]) continue;+ if (!ap_strcasecmp_match(servername, name[i])) {+ found =TRUE;+ break;+ }+ }+ }+ }++ /* set SSL_CTX (si trouvé) */+ if ( trouvé) {+ if ((ssl =((SSLConnRec *)myConnConfig(c))->ssl) ==NULL) + return 0;+ if (!(sc =mySrvConfig(s)))+ return 0; + SSL_set_SSL_CTX(ssl,sc->server->ssl_ctx);+ return 1;+ }+ return 0;+}++int ssl_set_vhost_ctx(SSL *ssl, const char *servername) +{+ conn_rec *c;++ if (nom_serveur ==NULL) /* ne doit pas se produire. */+ return 0;++ SSL_set_SSL_CTX(ssl,NULL);++ if (!(c =(conn_rec *)SSL_get_app_data(ssl))) + return 0;++ return ap_vhost_iterate_given_conn(c,set_ssl_vhost,servername);+ }++int ssl_servername_cb(SSL *s, int *al, modssl_ctx_t *mctx)+{+ const char *servername =SSL_get_servername(s,TLSEXT_NAMETYPE_host_name);++ if (servername) {+ return ssl_set_vhost_ctx(s,servername)?SSL_TLSEXT_ERR_OK :SSL_TLSEXT_ERR_ALERT_FATAL;+ }+ return SSL_TLSEXT_ERR_NOACK;+}+#endif+ /* * Initialisation par module */@@ -376,6 +457,29 @@ } } +static void ssl_init_server_extensions(server_rec *s,+ apr_pool_t *p ,+ apr_pool_t *ptemp,+ modssl_ctx_t *mctx)+{+ /*+ * Configurer la prise en charge des extensions TLS+ */++#ifndef OPENSSL_NO_TLSEXT+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,+ "Installation de configuration des extensions TLS");++ si (!SSL_CTX_set_tlsext_servername_callback(mc tx->ssl_ctx, ssl_servername_cb) ||+ !SSL_CTX_set_tlsext_servername_arg(mctx->ssl_ctx, mctx)) {+ ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,+ "Impossible d'initialiser le rappel du nom du serveur, mauvaise version d'openssl.");+ ssl_log_ssl_error (APLOG_MARK, APLOG_ERR, s);+ ssl_die();+ }+#endif+}+ vide statique ssl_init_ctx_protocol(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp,@@ -709,6 +810,8 @@ /* XXX :prise en charge des proxys ? */ ssl_init_ctx_cert_chain(s, p, ptemp, mctx); }++ ssl_init_server_extensions(s, p, ptemp, mctx); } static int ssl_server_import_cert(server_rec *s,@@ -1035,6 +1138,7 @@ } } +#ifdef OPENSSL_NO_TLSEXT /* * Envoie des avertissements lorsque plusieurs serveurs virtuels compatibles SSL utilisent le * même IP:port. Cela ne fonctionne pas car mod_ssl utilisera alors toujours @@ -1079,6 +1183,7 @@ "Init :vous ne devez pas utiliser d'hôtes virtuels " "basés sur le nom en conjonction avec SSL !!"); }+#endif } #ifdef SSLC_VERSION_NUMBERIndex :httpd-2.2.x/modules/ssl/ssl_engine_kernel.c=================================================================--- httpd-2.2.x/modules/ ssl/ssl_engine_kernel.c (révision 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_kernel.c (copie de travail)@@ -231,7 +231,20 @@ * celui actuellement actif. */ +#ifndef OPENSSL_NO_TLSEXT /*+ * Nous basculerons sur un autre virtualhost et sur son ssl_ctx+ * si modifié, nous forcerons une renégociation.+ */+ if (r->hostname &&!SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name)) { + SSL_CTX *ctx =SSL_get_SSL_CTX(ssl);+ if (ssl_set_vhost_ctx(ssl,(char *)r->hostname) &&+ ctx !=SSL_get_SSL_CTX(ssl))+ renegotiate =TRUE;+ }+#endif++ /* * Override de SSLCipherSuite * * Nous fournissons ici deux options :@@ -997,6 +1010,9 @@ SSLDirConfigRec *dc =myDirConfig(r); apr_table_t *env =r->subprocess_env ; char *var, *val ="" ;+#ifndef OPENSSL_NO_TLSEXT+ const char* nom_serveur ;+#endif STACK_OF(X509) *peer_certs ; SSL *ssl; int i;@@ -1018,6 +1034,12 @@ /* le drapeau HTTPS (=HTTP sur SSL) toujours présent ! */ apr_table_setn(env, "HTTPS", "on"); +#ifndef OPENSSL_NO_TLSEXT+ /* ajoute le contenu de l'extension SNI TLS (si fournie avec ClientHello) */+ if (servername =SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))+ apr_table_set(env, "TLS_SNI", servername);+#endif+ /* standard Variables d'environnement SSL */ if (dc->nOptions &SSL_OPT_STDENVVARS) { for (i =0; ssl_hook_Fixup_vars[i]; i++) {Index :httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h==================================================================--- httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h (révision 423224)+++ httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h (copie de travail )@@ -258,6 +258,12 @@ #define SSL_SESS_CACHE_NO_INTERNAL SSL_SESS_CACHE_NO_INTERNAL_LOOKUP #endif +#ifndef OPENSSL_NO_TLSEXT+#ifndef SSL_CTRL_SET_TLSEXT_HOSTNAME+#define OPENSSL_NO_TLSEXT+#endif+#endif+ #endif /* SSL_TOOLKIT_COMPAT @}///**> 

Utilisez ctrl+d pour quitter

cd apache2-2.2.3/
correctif –p1

Modifiez la version.

cd debian/
dch –i

Et modifiez les lignes 1 à 5 pour qu'elles ressemblent à ceci :

apache2 (2.2.3-4a+etch) stable ; urgency=low
* Extensions TLS activées
-- John Doe Tue, 5 Nov 2007 06:29:54 -0600

Recompilez le paquet source.

cd ../..
dpkg-source –b apache2-2.2.3/ apache2_2.2.3.orig.tar.gz

Compilez apache2 avec pbuilder.

pbuilder construit apache2_2.2.3-4a+etch.dsc

3. Compiler OpenSSL-0.9.8g

Modifiez /etc/apt/sources.list avec votre éditeur préféré et ajoutez une nouvelle ligne en utilisant sid pour la distribution

deb-src http://ftp.debian.org/debian/ sid main

apt-get update
mkdir /usr/src/openssl
cd /usr/src/openssl/
apt-get source openssl

Modifiez le fichier /usr/src/openssl/openssl-0.9.8g/debian/rules et ajoutez enable-tlsext à la ligne 22 pour qu'il ressemble à ceci :

CONFARGS =--prefix=/usr --openssldir=/usr/lib/ssl no-idea no-mdc2 no-rc5 zlib enable-tlsext 

cd openssl-0.9.8g/debian/
dch -i

Modifiez la version aux lignes 1 à 5 pour qu'elle ressemble à ceci :

openssl (0.9.8g-1) instable ; urgency=low
* Extensions TLS activées
-- John Doe Mon, 5 Nov 2007 22:40:05 -0600

Recompilez le paquet source.

cd ../..
dpkg-source –b openssl-0.9.8g/ openssl_0.9.8g.orig.tar.gz

Compilez OpenSSL avec pbuilder.

pbuilder build openssl_0.9.8g-1.dsc

Installation des packages nouvellement construits.

cd /var/cache/pbuilder/result
dpkg –i apache2_2.2.3-4a+etch_all.deb
dpkg –i apache2.2-common_2.2.3-4a+etch_i386.deb
dpkg –i apache2-mpm-prefork_2.2.3-4a+etch_i386.deb
dpkg –i libssl0.9.8_0.9.8g-1_i386.deb
dpkg –i openssl_0.9.8g-1_i386.deb

Exécutez cette commande pour corriger les dépendances.

apt-get install –f

4. Configurez ISPConfig pour autoriser plusieurs sites Web sécurisés sur une seule adresse IP

Modifiez /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_web.lib.php et recherchez ce qui suit :

 ////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// $ssl_count =$go_api->db->queryOneRecord ("SELECT count(doc_id) as ssl_co if($ssl_count["ssl_count"]> 1) { // Il existe un Web SSL avec cette IP $status ="NOTIFY"; $errorMessage .=$go_api->lng( "error_web_ssl_exist"); $go_api->db->query("UPDATE isp_isp_web set web_ssl =0 where doc_id =}

Commentez-le pour qu'il ressemble à ceci :

 ////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// // $ssl_count =$go_api->db->queryOneRecord("SELECT count(doc_id) as ssl_co // if($ssl_count["ssl_count"]> 1) { // // Il existe un SSL Web avec cette IP // $status ="NOTIFY"; // $errorMessage .=$go_api->lng("error_web_ssl_exist"); // $go_api->db->query("UPDATE isp_isp_web set web_ssl =0 where doc_id =// }

Cherchez à nouveau dans le même fichier et commentez-les.

Créez un site sécurisé par défaut que les utilisateurs verront s'ils utilisent un navigateur non conforme à la RFC 4366.

mkdir /var/www/sharedip/ssl
cd /var/www/sharedip/ssl
openssl genrsa -des3 -passout pass:yourpassword -out 192.168.1.2.key2 1024
openssl req - new -passin pass:yourpassword -passout pass:yourpassword -key 192.168.1.2.key2 -out 192.168.1.2.csr -days 365
openssl req -x509 -passin pass:yourpassword -passout pass:yourpassword -key 192.168. 1.2.key2 -in 192.168.1.2.csr -out 192.168.1.2.crt -days 365
openssl rsa -passin pass:yourpassword -in 192.168.1.2.key2 -out 192.168.1.2.key
chmod 400 192.168.1.2.clé

Assurez-vous d'entrer votre propre mot de passe.
De plus, j'utiliserais un astérisque "*" pour le nom commun.

Modifiez /etc/apache2/apache2.conf et placez-le au-dessus Inclure /etc/apache2/vhosts/Vhosts_ispconfig.conf

NameVirtualHost 192.168.1.2:443 ServerName localhost ServerAdmin [email protected] DocumentRoot /var/www/sharedip SSLEngine sur SSLCertificateFile /var/www/sharedip/ssl/192.168.1.2.crt SSLCertificateKeyFile /var/www/sharedip/ssl/192.168.1.2.key

Testez la création de plusieurs sites avec SSL activé.
Vous devez avoir un navigateur conforme à la RFC 4366 pour pouvoir visualiser les sites correctement.
Pour tester votre navigateur, rendez-vous sur https://dave.sni.velox.ch /et vérifiez si votre navigateur fonctionne.

http://edseek.com/~jasonb/articles/pbuilder_backports/index.html
https://dave.sni.velox.ch/
http://www.edelweb.fr/EdelKey/


Panels
  1. Debian - Comment créer un disque Squeeze USB Debian pour Ppc?

  2. Comment activer/désactiver ModSecurity pour vos domaines dans cPanel

  3. Comment activer la compression gzip pour un site spécifique

  4. Comment écouter plusieurs connexions tcp en utilisant nc

  5. comment installer l'interface graphique pour debian

Comment activer HTTPS pour Varnish Cache à l'aide de Hitch sur CentOS-RHEL 8

Comment activer l'URL temporaire pour WHM/cPanel ?

Comment activer/désactiver les modules Apache &PHP avec EasyApache4 ?

Comment activer CloudFlare CDN pour mon site Web ?

Comment installer Drupal 5.6 sur Debian Etch avec ISPConfig

Comment forcer le HTTPS pour mon domaine ?