GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Panels

So aktivieren Sie mehrere HTTPS-Sites für eine IP auf Debian Etch mithilfe von TLS-Erweiterungen

So aktivieren Sie mehrere HTTPS-Sites für eine IP auf Debian Etch mit TLS Erweiterungen

Diese Anleitung ist Debian-spezifisch, könnte aber auf andere Distributionen portiert werden, da das Konzept dasselbe ist. Um TLS-Erweiterungen zu verwenden, müssen wir Apache2 patchen und neu kompilieren und OpenSSL mit der Direktive enable-tlsext neu kompilieren. Da TLS-Erweiterungen relativ neu sind , funktionieren einige Internetbrowser nicht, sodass der Apache2-Server nur die Standardseite liefert, wie es HTTP 1.0 auf einem HTTP 1.1-Server tut.

Diese Anleitung geht davon aus, dass Sie perfect_setup_debian_etch bis zum Ende befolgt haben.

1. pbuilder vorbereiten

pbuilder installieren.

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

Bearbeiten Sie als Nächstes /etc/pbuilder/pbuilderrc in Zeile 11, um eine Ihnen am nächsten gelegene Site wiederzugeben. Dies ist die Site, die apt verwendet, um Abhängigkeiten aufzulösen.

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

Gehen Sie in derselben Datei zu Zeile 20 und setzen Sie DISTRIBUTION=etch

Erstellen Sie schließlich Ihr pbuilder-Image.

pbuilder create --distribution etch

2. Apache2 patchen und neu kompilieren.

Zuerst müssen wir ein Verzeichnis erstellen, um die Quellen zu speichern und sie herunterzuladen.

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

Kopieren und speichern Sie diesen Patch unter /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 - Unterstützung der Servernamensanzeige für Apache 2.2 (siehe RFC 4366, "Transport Layer Security (TLS) Extensions" )Basierend auf einem Patch des EdelKey-Projekts (http://www.edelweb.fr/EdelKey/files/apache-2.2.0+0.9.9+servername.patch) Benötigt openssl-SNAP-20060330 / openssl-0.9.8 -stable-SNAP-20070813 oder höher, um ordnungsgemäß zu funktionieren (ftp://ftp.openssl.org/snapshot/). Der Zweig 0.9.8 muss zur Kompilierzeit explizit für die Unterstützung von TLS-Erweiterungen konfiguriert werden ("./config enable-tlsext").Index:httpd-2.2.x/modules/ssl/ssl_engine_init.c================================================================--- httpd-2.2.x/modules/ssl/ssl_engine_init.c (Revision 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_init.c (Arbeitskopie)@@ -156,6 +156,87 @@ Rückgabe OK; } +#ifndef OPENSSL_NO_TLSEXT+static int set_ssl_vhost(void *servername, conn_rec *c, server_rec *s) +{+ SSLSrvConfigRec *sc;+ SSL *ssl;+ BOOL gefunden =FALSE;+ apr_array_header_t *namen;+ int i;+ + /* ServerName prüfen */+ if (!strcasecmp(servername, s->server_hostname))+ found =TRUE;++ /* falls noch nicht gefunden, ServerAlias-Einträge prüfen */+ 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;+ }+ }+ }+ }++ /* wenn immer noch keine Übereinstimmung, ServerAlias-Einträge prüfen mit Wildcards */+ if (!found) {+ names =s->wild_names;+ if (names) {+ char **name =(char **) names->elts;+ for (i =0; i nelts; ++i) {+ if(!name[i ]) Continue;+ if (!ap_strcasecmp_match(servername, name[i])) {+ found =TRUE;+ break;+ }+ }+ }+ }++ /* setze SSL_CTX (falls zutreffend) */+ if ( gefunden) {+ 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 (servername ==NULL) /* sollte nicht vorkommen. */+ 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+ /* * Initialisierung pro Modul */@@ -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)+{+ /*+ * Unterstützung für TLS-Erweiterungen konfigurieren+ */++#ifndef OPENSSL_NO_TLSEXT+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,+ "Konfiguration von TLS-Erweiterungen");++ 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,+ "Rückruf des Servernamens kann nicht initialisiert werden, schlechte Openssl-Version.");+ 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:Proxy-Unterstützung? */ 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 /* * Warnungen ausgeben, wenn mehr als ein SSL-fähiger virtueller Server denselben * IP:Port verwendet. Das funktioniert nicht, weil mod_ssl dann immer @@ -1079,6 +1183,7 @@ "Init:Sie sollten keine namensbasierten " "virtuellen Hosts in Verbindung mit SSL verwenden!!"); }+#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 (Revision 423224)+++ httpd-2.2.x/modules/ssl/ssl_engine_kernel.c (Arbeitskopie)@@ -231,7 +231,20 @@ * die derzeit aktive. */ +#ifndef OPENSSL_NO_TLSEXT /*+ * Wir wechseln zu einem anderen virtuellen Host und zu dessen ssl_ctx+ * bei Änderung erzwingen wir eine Neuverhandlung.+ */+ 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))+ neu verhandeln =TRUE;+ }+#endif++ /* * Überschreiben of SSLCipherSuite * * Wir stellen hier zwei Optionen zur Verfügung:@@ -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 @@ /* das immer vorhandene HTTPS (=HTTP over SSL) Flag! */ apr_table_setn(env, "HTTPS", "on"); +#ifndef OPENSSL_NO_TLSEXT+ /* Inhalt der SNI-TLS-Erweiterung hinzufügen (falls mit ClientHello bereitgestellt) */+ if (servername =SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))+ apr_table_set(env, "TLS_SNI", servername);+#endif+ /* standard SSL-Umgebungsvariablen */ 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 (Revision 423224)+++ httpd-2.2.x/modules/ssl/ssl_toolkit_compat.h (Arbeitskopie )@@ -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_H *//pre @> 

Verwenden Sie Strg+D zum Beenden

cd apache2-2.2.3/
patch –p1

Ändern Sie die Version.

cd debian/
dch –i

Und ändern Sie die Zeilen 1-5 so, dass es so aussieht:

Apache2 (2.2.3-4a+etch) stabil; urgency=low
* Aktivierte TLS-Erweiterungen
-- John Doe Di, 5 Nov 2007 06:29:54 -0600

Kompilieren Sie das Quellpaket neu.

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

Kompilieren Sie Apache2 mit pbuilder.

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

3. Kompilieren von OpenSSL-0.9.8g

Bearbeiten Sie /etc/apt/sources.list mit Ihrem bevorzugten Editor und fügen Sie eine neue Zeile mit sid für die Verteilung hinzu

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

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

Bearbeiten Sie die Datei /usr/src/openssl/openssl-0.9.8g/debian/rules und fügen Sie enable-tlsext in Zeile 22 hinzu, sodass es so aussieht:

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

cd openssl-0.9.8g/debian/
dch -i

Ändern Sie die Version in den Zeilen 1-5 so, dass sie so aussieht:

openssl (0.9.8g-1) instabil; urgency=low
* Aktivierte TLS-Erweiterungen
-- John Doe Mo, 5 Nov 2007 22:40:05 -0600

Kompilieren Sie das Quellpaket neu.

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

Kompilieren Sie OpenSSL mit pbuilder.

pbuilder build openssl_0.9.8g-1.dsc

Installieren der neu erstellten Pakete.

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

Führen Sie diesen Befehl aus, um alle Abhängigkeiten zu beheben.

apt-get install –f

4. Konfigurieren Sie ISPConfig, um mehrere sichere Websites auf einer IP-Adresse zuzulassen

Bearbeiten Sie /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_web.lib.php und suchen Sie nach Folgendem:

 /////////////////////////////// /////////////////////// // Prüfen Sie, ob bereits ein SSL-Zertifikat auf der IP existiert /////////////// ////////////////////////////////////// $ssl_count =$go_api->db->queryOneRecord ("SELECT count(doc_id) as ssl_co if($ssl_count["ssl_count"]> 1) { // Es existiert bereits ein SSL Web mit dieser 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 =}

Kommentieren Sie es aus, damit es so aussieht:

 /////////////////////////////// /////////////////////// // Prüfen Sie, ob bereits ein SSL-Zertifikat auf der IP existiert /////////////// ////////////////////////////////////// // $ssl_count =$go_api->db->queryOneRecord("SELECT count(doc_id) as ssl_co // if($ssl_count["ssl_count"]> 1) { // // Es existiert bereits ein SSL Web mit dieser 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 =// }

Suchen Sie erneut in derselben Datei und kommentieren Sie diese aus.

Erstellen Sie eine sichere Standard-Site, die Benutzern angezeigt wird, wenn sie einen nicht RFC 4366-kompatiblen Browser verwenden.

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.Schlüssel

Achten Sie darauf, Ihr eigenes Passwort einzugeben.
Außerdem würde ich ein Sternchen "*" für den allgemeinen Namen verwenden.

Bearbeiten Sie /etc/apache2/apache2.conf und platzieren Sie diese oben. Fügen Sie /etc/apache2/vhosts/Vhosts_ispconfig.conf ein

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

Testen Sie die Erstellung mehrerer Websites mit aktiviertem SSL.
Sie müssen einen RFC 4366-kompatiblen Browser haben, um die Websites korrekt anzeigen zu können.
Um Ihren Browser zu testen, gehen Sie zu https://dave.sni.velox.ch /und überprüfen Sie, ob Ihr Browser funktioniert.

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


Panels
  1. Debian – Wie erstelle ich USB Debian Squeeze Disk für PPC?

  2. Ist es möglich, mit Dh_installinit zwei Dienste für ein Paket zu installieren? Wie?

  3. Wie aktiviere/deaktiviere ich PHP-Erweiterungen von cPanel?

  4. So führen Sie ISPConfig 2 auf Port 80 mithilfe der Reverse-Proxy-Funktion von Apache aus (Debian Etch)

  5. So aktivieren/deaktivieren Sie ModSecurity für Ihre Domains in cPanel

So aktivieren Sie HTTPS für Varnish Cache mit Hitch auf CentOS-RHEL 8

Wie aktiviere ich temporäre URLs für WHM/cPanel?

Wie aktiviere/deaktiviere ich Apache- und PHP-Module mit EasyApache4?

Wie aktiviere ich CloudFlare CDN für meine Website?

So installieren Sie Drupal 5.6 auf Debian Etch mit ISPConfig

Wie erzwinge ich HTTPS für meine Domain?