GNU/Linux >> Znalost Linux >  >> Panels >> Panels

Jak povolit více webů HTTPS pro jednu IP na Debian Etch pomocí rozšíření TLS

Jak povolit více webů HTTPS pro jednu IP v Debian Etch pomocí TLS Rozšíření

Tento návod je specifický pro Debian, ale mohl by být přenesen na jiné distribuce, protože koncept je stejný. Abychom mohli používat rozšíření TLS, musíme opravit a znovu zkompilovat apache2 a znovu zkompilovat OpenSSL pomocí direktivy enable-tlsext. Protože rozšíření TLS jsou relativně nová , některé internetové prohlížeče nebudou fungovat, takže server apache2 bude poskytovat pouze výchozí web, jako to dělá http 1.0 na serveru http 1.1.

Tento návod předpokládá, že jste dodrželi perfect_setup_debian_etch až do konce.

1. Příprava pbuilderu

Nainstalujte pbuilder.

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

Dále upravte /etc/pbuilder/pbuilderrc na řádku 11 tak, aby odrážel web, který je vám nejblíže. Toto je stránka, kterou apt použije k vyřešení závislostí.

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

Ve stejném souboru přejděte na řádek 20 a nastavte DISTRIBUTION=etch

Nakonec vytvořte svůj obraz pbuilderu.

pbuilder create --distribution etch

2. Patching a rekompilace apache2.

Nejprve musíme vytvořit adresář, do kterého budeme ukládat zdroje a stáhnout je.

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

Zkopírujte a uložte tuto opravu do /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 - podpora označení názvu serveru pro Apache 2.2 (viz RFC 4366, "Transport Layer Security (TLS) Extensions") )založené na opravě z projektu EdelKey (http://www.edelweb.fr/EdelKey/files/apache-2.2.0+0.9.9+servername.patch)Potřebuje openssl-SNAP-20060330 / openssl-0.9.8 -stable-SNAP-20070813 nebo novější, aby fungoval správně (ftp://ftp.openssl.org/snapshot/). Větev 0.9.8 musí být explicitně nakonfigurována pro podporu rozšíření TLS v době kompilace ("./config enable-tlsext"). Index:httpd-2.2.x/modules/ssl/ssl_engine_init.c=====================================================================--- httpd-2.2.x/modules/ssl/ssl_engine_init.c (revize 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_init.c (pracovní kopie)@@ -156,6 +156,87 @@ return OK; } +#ifndef OPENSSL_NO_TLSEXT+static int set_ssl_vhost(void *název_serveru, conn_rec *c, server_rec *s) +{+ SSLSrvConfigRec *sc;+ SSL *ssl;+ BOOL nalezen =FALSE;+ apr_array_header_t *s i; + /* zkontrolovat ServerName */+ if (!strcasecmp(servername, s->server_hostname))+ found =TRUE;++ /* pokud ještě neodpovídá, zkontrolujte položky ServerAlias ​​*/+ if (!found) {+ names =s->jména;+ if (jména) {+ char **jméno =(znak **) jména->elts;+ for (i =0; i nelts; ++i) {+ if(! jméno[i]) pokračovat;+ pokud (!strcasecmp(název serveru, název[i])) {+ nalezeno =PRAVDA;+ přerušení;+ }+ }+ }+ }++ /* pokud stále žádná shoda, zkontrolujte položky ServerAlias se zástupnými znaky */+ if (!found) {+ names =s->wild_names;+ if (names) {+ char **name =(char **) names->elts;+ for (i =0; i nelts; ++i) {+ if(!jméno[i ]) pokračovat;+ if (!ap_strcasecmp_match(název serveru, název[i])) {+ nalezeno =TRUE;+ break;+ }+ }+ }+ }++ /* nastavit SSL_CTX (pokud je shoda) */+ if ( nalezeno) {+ 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 *název serveru) +{+ conn_rec *c;++ pokud (název serveru ==NULL) /* by se nemělo vyskytovat. */+ 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,název serveru);+ }++int ssl_servername_cb(SSL *s, int *al, modssl_ctx_t *mctx)+{+ const char *název_serveru =SSL_get_servername(s,TLSEXT_NAMETYPE_host_name);++ if (servername) {+ return ssl_set_vhost_SLERct_OKSTL_S :SSL_TLSEXT_ERR_ALERT_FATAL;+ }+ return SSL_TLSEXT_ERR_NOACK;+}+#endif+ /* * Inicializace na modul */@@ -376,6 +457,29 @@ } } +static void ssl_init_server_extensions *apr_server_extensions,+server ,+ apr_pool_t *ptemp,+ modssl_ctx_t *mctx)+{+ /*+ * Konfigurace podpory rozšíření TLS+ */++#ifndef OPENSSL_NO_TLSEXT+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,+ "Konfigurace rozšíření 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 chybné volání, 0, s,+ inicializovat server ssl, nelze otevřít verzi serveru (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:podpora 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 /* * Zobrazí varování, když více než jeden virtuální server podporující SSL používá * stejnou IP:port. Toto nefunguje, protože mod_ssl bude vždy používat@@ -1079,6 +1183,7 @@ "Init:Neměli byste používat " "virtuální hostitele založené na jménech ve spojení s 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 (revize 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_kernel.c (pracovní kopie)@@ -231,7 +231,20 @@ * aktuálně aktivní. */ +#ifndef OPENSSL_NO_TLSEXT /*+ * Přepneme na jiného virtuálního hostitele a na jeho ssl_ctx+ * pokud se změní, vynutíme nové vyjednává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->název hostitele) &&+ ctx !=SSL_get_SSL_CTX(ssl))+ renegotiate =TRUE;+ /* *Overridif of SSLCipherSuite * * Zde nabízíme dvě možnosti:@@ -997,6 +1010,9 @@ SSLDirConfigRec *dc =myDirConfig(r); apr_table_t *env =r->subprocess_env; char *var, *val ="";+#ifndef OPENSSL_NO_TLSEXT+ const char* servername;+#endif STACK_OF(X509) *peer_certs; SSL *ssl; int i;@@ -1018,6 +1034,12 @@ /* vždy přítomný příznak HTTPS (=HTTP přes SSL)! */ apr_table_setn(env, "HTTPS", "zapnuto"); +#ifndef OPENSSL_NO_TLSEXT+ /* přidat obsah rozšíření SNI TLS (pokud je dodáno s ClientHello) */+ if (název serveru =SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))+ apr_table_set(env, "TLS_SNI", servername);+#endif+ Proměnné prostředí 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 (revize 423224)+++ httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h (pracovní kopie )@@ -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_TLSEXTOOLe#definTOOL_HOSTNSPif #SL_CTRL_SET_TLSEXTOOLTOOL_HOSTNSPif #defin+ /**SLOPSEX+#definKIT_HOST_+> 

Pro ukončení použijte ctrl+d

cd apache2-2.2.3/
patch –p1

Změňte verzi.

cd debian/
dch –i

A upravte řádky 1-5 tak, aby to vypadalo takto:

apache2 (2.2.3-4a+etch) stabilní; urgency=low
* Povolená rozšíření TLS
-- John Doe Út, 5. listopadu 2007 06:29:54 -0600

Znovu zkompilujte zdrojový balíček.

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

Zkompilujte apache2 pomocí pbuilderu.

sestavení pbuilderu apache2_2.2.3-4a+etch.dsc

3. Kompilace OpenSSL-0.9.8g

Upravte /etc/apt/sources.list pomocí svého oblíbeného editoru a přidejte nový řádek pomocí sid pro distribuci

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

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

Upravte soubor /usr/src/openssl/openssl-0.9.8g/debian/rules a přidejte enable-tlsext na řádek 22, aby to vypadalo takto:

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

cd openssl-0.9.8g/debian/
dch -i

Změňte verzi na řádcích 1-5, aby vypadala takto:

openssl (0.9.8g-1) nestabilní; urgency=low
* Povolená rozšíření TLS
-- John Doe Po, 5. listopadu 2007 22:40:05 -0600

Znovu zkompilujte zdrojový balíček.

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

Zkompilujte OpenSSL pomocí pbuilderu.

sestavení pbuilderu openssl_0.9.8g-1.dsc

Instalace nově vytvořených balíčků.

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

Spuštěním tohoto příkazu opravíte všechny závislosti.

apt-get install –f

4. Nakonfigurujte ISPConfig tak, aby umožňoval více zabezpečených webových stránek na jedné IP adrese

Upravte /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_web.lib.php a vyhledejte následující:

 ////////////////////////////// ///////////////////////// Zkontrolovat certifikát SSL na IP Existiert /////////////// /////////////////////////////////////// $ssl_count =$go_api->db->queryOneRecord ("SELECT count(doc_id) as ssl_co if($ssl_count["ssl_count"]> 1) { // Existuje web SSL se svou IP $status ="NOTIFY"; $errorMessage .=$go_api->lng( "error_web_ssl_exist"); $go_api->db->query("AKTUALIZACE sady isp_isp_web web_ssl =0 kde doc_id =}

Zakomentujte to, aby to vypadalo takto:

 ////////////////////////////// ///////////////////////// Zkontrolovat certifikát SSL na IP Existiert /////////////// ///////////////////////////////////////// $ssl_count =$go_api->db->queryOneRecord("SELECT count(doc_id) as ssl_co // if($ssl_count["ssl_count"]> 1) { // // Existuje web SSL s jinou IP // $status ="NOTIFY"; // $errorMessage .=$go_api->lng("error_web_ssl_exist"); // $go_api->db->query("UPDATE isp_isp_web set web_ssl =0 kde doc_id =// }

Hledejte znovu ve stejném souboru a okomentujte je.

Vytvořte výchozí zabezpečený web, který uživatelé uvidí, pokud používají prohlížeč, který není kompatibilní s RFC 4366.

mkdir /var/www/sharedip/ssl
cd /var/www/sharedip/ssl
openssl genrsa -des3 -passout pass:vaše heslo -out 192.168.1.2.key2 1024
openssl req - new -passin pass:vaše heslo -passout pass:vaše heslo -klíč 192.168.1.2.key2 -out 192.168.1.2.csr -days 365
openssl req -x509 -passin pass:vaše heslo -passout pass:vaše heslo.18 klíč 1 1.2.key2 -in 192.168.1.2.csr -out 192.168.1.2.crt -days 365
openssl rsa -passin pass:vaše heslo -in 192.168.1.2.key2 -out 192.2.168.192.168.1 400 192.168.1.2.klíč

Ujistěte se, že zadáváte své vlastní heslo.
Také bych jako běžný název použil hvězdičku "*".

Upravte /etc/apache2/apache2.conf a umístěte jej výše. Zahrňte /etc/apache2/vhosts/Vhosts_ispconfig.conf

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

Otestujte vytvoření více webů s povoleným SSL.
Abyste mohli weby správně zobrazit, musíte mít prohlížeč kompatibilní s RFC 4366.
Pro otestování prohlížeče přejděte na https://dave.sni.velox.ch /a zkontrolujte, zda váš prohlížeč funguje.

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


Panels
  1. Debian – Jak vytvořit USB Debian Squeeze Disk pro PPC?

  2. Je možné nainstalovat dvě služby pro jeden balíček pomocí Dh_installinit? Jak?

  3. Jak povolit/zakázat rozšíření PHP z cPanelu?

  1. Jak spustit ISPConfig 2 na portu 80 pomocí funkce Apaches Reverse Proxy (Debian Etch)

  2. Jak povolit/zakázat ModSecurity pro vaše domény v cPanel

  3. Jak povolit kompresi gzip pro konkrétní web

  1. Jak povolit SSH na Debianu 9 nebo 10

  2. Jak poslouchat vícenásobné připojení TCP pomocí nc

  3. jak nainstalovat gui pro debian