GNU/Linux >> Tutoriales Linux >  >> Panels >> Panels

Cómo habilitar múltiples sitios HTTPS para una IP en Debian Etch usando extensiones TLS

Cómo habilitar múltiples sitios HTTPS para una IP en Debian Etch usando TLS Extensiones

Este tutorial es específico de Debian, pero podría trasladarse a otras distribuciones ya que el concepto es el mismo. Para usar las extensiones TLS, tenemos que parchear y recompilar apache2 y recompilar OpenSSL con la directiva enable-tlsext. Dado que las extensiones TLS son relativamente nuevas , algunos navegadores de Internet no funcionarán, por lo que el servidor apache2 entregará solo el sitio predeterminado como lo hace http 1.0 en un servidor http 1.1.

Este tutorial asume que ha seguido perfect_setup_debian_etch hasta completarlo.

1. Preparando pbuilder

Instale pbuilder.

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

Luego edite /etc/pbuilder/pbuilderrc en la línea 11 para reflejar un sitio más cercano a usted. Este es el sitio que usará apt para resolver las dependencias.

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

En el mismo archivo, vaya a la línea 20 y configure DISTRIBUTION=etch

Finalmente crea tu imagen pbuilder.

pbuilder crear --distribución etch

2. Parcheando y recompilando apache2.

Primero debemos crear un directorio para almacenar las fuentes y descargarlas.

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

Copie y guarde este parche en /usr/src/apache2/apache2-2.2.3/httpd-2.2.3-sni.patch

gato> /usr/src/apache2/apache2-2.2.3/httpd-2.2.3-sni.patch

Usa ctrl+d para salir

cd apache2-2.2.3/
parche –p1

Cambia la versión.

cd debian/
dch –i

Y modifique las líneas 1-5 para que se vea así:

httpd-2.2.3-sni.patch:soporte de indicación de nombre de servidor para Apache 2.2 (consulte RFC 4366, "Extensiones de seguridad de la capa de transporte (TLS)" )basado en un parche del proyecto EdelKey(http://www.edelweb.fr/EdelKey/files/apache-2.2.0+0.9.9+servername.patch)Necesita openssl-SNAP-20060330 / openssl-0.9.8 -stable-SNAP-20070813 o posterior para que funcione correctamente (ftp://ftp.openssl.org/snapshot/). La rama 0.9.8 debe configurarse explícitamente para admitir la extensión TLS en tiempo de compilación ("./config enable-tlsext"). Índice:httpd-2.2.x/modules/ssl/ssl_engine_init.c===================================================================--- httpd-2.2.x/modules/ssl/ssl_engine_init.c (revisión 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_init.c (copia de trabajo)@@ -156,6 +156,87 @@ volver OK; } +#ifndef OPENSSL_NO_TLSEXT+static int set_ssl_vhost(void *nombreservidor, conn_rec *c, servidor_rec *s) +{+ SSLSrvConfigRec *sc;+ SSL *ssl;+ BOOL encontrado =FALSO;+ apr_array_header_t *nombres;+ int i;+ + /* comprueba ServerName */+ if (!strcasecmp(servername, s->server_hostname))+ found =TRUE;++ /* si aún no coincide, comprueba las entradas de ServerAlias ​​*/+ if (!found) {+ names =s->nombres;+ if (nombres) {+ char **nombre =(char **) nombres->elts;+ for (i =0; i nelts; ++i) {+ if(! name[i]) continue;+ if (!strcasecmp(servername, name[i])) {+ found =TRUE;+ break;+ }+ }+ }+ }++ /* si aún no hay coincidencia, verifique las entradas de ServerAlias con comodines */+ if (!found) {+ nombres =s->wild_names;+ if (names) {+ char **name =(char **) names->elts;+ for (i =0; i nelts; ++i) {+ if(!nombre[i ]) continue;+ if (!ap_strcasecmp_match(servername, name[i])) {+ found =TRUE;+ break;+ }+ }+ }+ }++ /* establece SSL_CTX (si coincide) */+ if ( encontrado) {+ if ((ssl =((SSLConnRec *)myConnConfig(c))->ssl) ==NULL) + return 0;+ if (!(sc =mySrvConfig(s)))+ return 0; + SSL_set_SSL_CTX(ssl,sc->servidor->ssl_ctx);+ return 1;+ }+ return 0;+}++int ssl_set_vhost_ctx(SSL *ssl, const char *nombreservidor) +{+ conn_rec *c;++ if (nombreservidor ==NULL) /* no debería ocurrir. */+ devuelve 0;++ SSL_set_SSL_CTX(ssl,NULL);++ if (!(c =(conn_rec *)SSL_get_app_data(ssl))) + devuelve 0;++ devuelve 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+ /* * Inicialización por módulo */@@ -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)+{+ /*+ * Configurar soporte de extensiones TLS+ */++#ifndef OPENSSL_NO_TLSEXT+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,+ "Configuración de la instalación de extensiones TLS");++ if (!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,+ "No se puede inicializar la devolución de llamada del nombre del servidor, versión incorrecta de openssl.");+ ssl_log_ssl_error (APLOG_MARK, APLOG_ERR, s);+ ssl_die();+ }+#endif+}+ static void ssl_init_ctx_protocol(server_rec *s, apr_pool_t *p, apr_pool_t *ptemp,@@ -709,6 +810,8 @@ /* XXX:soporte de proxy? */ 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 /* * Brinda advertencias cuando más de un servidor virtual compatible con SSL utiliza * la misma IP:puerto. Esto no funciona porque mod_ssl entonces siempre usará @@ -1079,6 +1183,7 @@ "Init:¡No debe usar ""hosts virtuales basados ​​en nombres junto con 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 (revisión 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_kernel.c (copia de trabajo)@@ -231,7 +231,20 @@ * el actualmente activo. */ +#ifndef OPENSSL_NO_TLSEXT /*+ * Cambiaremos a otro virtualhost y a su ssl_ctx+ * si cambia, forzaremos una renegociación.+ */+ 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))+ renegociar =TRUE;+ }+#endif++ /* * Anular de SSLCipherSuite * * Ofrecemos dos opciones aquí:@@ -997,6 +1010,9 @@ SSLDirConfigRec *dc =myDirConfig(r); apr_table_t *env =r->subprocess_env; char *var, *val ="";+#ifndef OPENSSL_NO_TLSEXT+ const char* nombreservidor;+#endif STACK_OF(X509) *peer_certs; SSL *ssl; int i;@@ -1018,6 +1034,12 @@ /* ¡el indicador HTTPS (=HTTP sobre SSL) siempre presente! */ apr_table_setn(env, "HTTPS", "on"); +#ifndef OPENSSL_NO_TLSEXT+ /* agregar contenido de la extensión SNI TLS (si se proporciona con ClientHello) */+ if (servername =SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))+ apr_table_set(env, "TLS_SNI", servername);+#endif+ /* estándar Variables de entorno SSL */ if (dc->nOptions &SSL_OPT_STDENVVARS) { for (i =0; ssl_hook_Fixup_vars[i]; i++) {Índice:httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h===================================================================--- httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h (revisión 423224)+++ httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h (copia de trabajo )@@ -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 */_/pre @_}H> 

Vuelva a compilar el paquete fuente.

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

Compile apache2 con pbuilder.

construcción pbuilder apache2_2.2.3-4a+etch.dsc

3. Compilando OpenSSL-0.9.8g

Edite /etc/apt/sources.list con su editor favorito y agregue una nueva línea usando sid para la distribución

apache2 (2.2.3-4a+etch) estable; urgency=low
* Extensiones TLS habilitadas
-- John Doe martes, 5 de noviembre de 2007 06:29:54 -0600

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

Edite el archivo /usr/src/openssl/openssl-0.9.8g/debian/rules y agregue enable-tlsext en la línea 22 para que se vea así:

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

cd openssl-0.9.8g/debian/
dch -i

Cambie la versión en las líneas 1-5 para que se vea así:

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

Vuelva a compilar el paquete fuente.

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

Compile OpenSSL con pbuilder.

la compilación de pbuilder abressl_0.9.8g-1.dsc

Instalando los paquetes recién creados.

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

Ejecute este comando para arreglar cualquier dependencia.

apt-get install –f

4. Configure ISPConfig para permitir múltiples sitios web seguros en una dirección IP

Edite /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_web.lib.php y busque lo siguiente:

openssl (0.9.8g-1) inestable; urgency=low
* Extensiones TLS habilitadas
-- John Doe lunes, 5 de noviembre de 2007 22:40:05 -0600

Coméntalo para que se vea así:

 //////////////////////////////// /////////////////////// // Comprobar ob bereits ein SSL Cert auf der IP Existiert /////////////// ///////////////////////////////////////// $ssl_count =$go_api->db->queryOneRecord ("SELECT count(doc_id) as ssl_co if($ssl_count["ssl_count"]> 1) { // Es existente bereits ein SSL Web mit dieser IP $status ="NOTIFY"; $errorMessage .=$go_api->lng( "error_web_ssl_exist"); $go_api->db->query("ACTUALIZAR isp_isp_web conjunto web_ssl =0 donde doc_id =}

Vuelva a buscar en el mismo archivo y coméntelos.

Cree un sitio seguro predeterminado que los usuarios verán si utilizan un navegador que no cumple con 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:tucontraseña -passout pass:tucontraseña -key 192.168.1.2.key2 -out 192.168.1.2.csr -days 365
openssl req -x509 -passin pass:tucontraseña -passout pass:tucontraseña -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.clave

Asegúrese de ingresar su propia contraseña.
Además, usaría un asterisco "*" para el nombre común.

Edite /etc/apache2/apache2.conf y colóquelo arriba Incluya /etc/apache2/vhosts/Vhosts_ispconfig.conf

 //////////////////////////////// /////////////////////// // Comprobar ob bereits ein SSL Cert auf der IP Existiert /////////////// //////////////////////////////////////// // $ssl_count =$go_api->db->queryOneRecord("SELECT count(doc_id) as ssl_co // if($ssl_count["ssl_count"]> 1) { // // Es existente bereits ein SSL Web mit dieser IP // $status ="NOTIFY"; // $mensaje de error .=$go_api->lng("error_web_ssl_exist"); // $go_api->db->query("ACTUALIZAR isp_isp_web set web_ssl =0 where doc_id =// }

Pruebe la creación de varios sitios con SSL habilitado.
Debe tener un navegador compatible con RFC 4366 para poder ver los sitios correctamente.
Para probar su navegador, vaya a https://dave.sni.velox.ch /y comprueba si tu navegador funciona.

Enlaces:

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


Panels
  1. Debian – ¿Cómo hacer un disco USB Debian Squeeze para Ppc?

  2. ¿Es posible instalar dos servicios para un paquete usando Dh_installinit? ¿Cómo?

  3. ¿Cómo habilitar/deshabilitar las extensiones de PHP desde cPanel?

  4. Cómo ejecutar ISPConfig 2 en el puerto 80 usando la función de proxy inverso de Apache (Debian Etch)

  5. cómo instalar gui para debian

Cómo habilitar HTTPS para Varnish Cache usando Hitch en CentOS-RHEL 8

¿Cómo habilitar URL temporal para WHM/cPanel?

¿Cómo habilitar/deshabilitar los módulos de Apache y PHP usando EasyApache4?

¿Cómo habilitar CloudFlare CDN para mi sitio web?

Cómo instalar Drupal 5.6 en Debian Etch con ISPConfig

¿Cómo forzar HTTPS para mi dominio?

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