GNU/Linux >> Linux の 問題 >  >> Panels >> Panels

TLS拡張機能を使用してDebianEtchで1つのIPに対して複数のHTTPSサイトを有効にする方法

TLSを使用してDebianEtchで1つのIPに対して複数のHTTPSサイトを有効にする方法拡張機能

このハウツーはDebian固有ですが、概念が同じであるため、他のディストリビューションに移植できます。TLS拡張を使用するには、apache2にパッチを適用して再コンパイルし、enable-tlsextディレクティブを使用してOpenSSLを再コンパイルする必要があります。TLS拡張は比較的新しいため、一部のインターネットブラウザは機能しないため、apache2サーバーはhttp1.0がhttp1.1サーバーで行うのと同じようにデフォルトのサイトのみを配信します。

このハウツーは、perfect_setup_debian_etchを最後まで実行したことを前提としています。

1。 pbuilderの準備

pbuilderをインストールします。

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

次に、11行目の/ etc / pbuilder / pbuilderrcを編集して、最も近いサイトを反映します。これは、aptが依存関係を解決するために使用するサイトです。

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

同じファイルで20行目に移動し、DISTRIBUTION =etch

を設定します。

最後に、pbuilderイメージを作成します。

 pbuilder create --distributionetch 

2。 apache2にパッチを適用して再コンパイルします。

まず、ソースを保存してダウンロードするためのディレクトリを作成する必要があります。

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

このパッチをコピーして/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-Apache 2.2のサーバー名表示のサポート(RFC 4366「TransportLayerSecurity(TLS)Extensions」を参照) )EdelKeyプロジェクト(http://www.edelweb.fr/EdelKey/files/apache-2.2.0+0.9.9+servername.patch)のパッチに基づく必要がありますopenssl-SNAP-20060330 / openssl-0.9.8 -stable-SNAP-20070813以降が正しく機能します(ftp://ftp.openssl.org/snapshot/)。 0.9.8ブランチは、コンパイル時にTLS拡張サポート用に明示的に構成する必要があります( "./ configenable-tlsext")。インデックス:httpd-2.2.x / modules / ssl / ssl_engine_init.c ===================================================================--- httpd-2.2.x / modules / ssl / ssl_engine_init.c(リビジョン423224)+++ httpd-2.2.x / modules / ssl / ssl_engine_init.c(作業コピー)@@ -156,6 +156,87 @@ return OK; } +#ifndef OPENSSL_NO_TLSEXT + static int set_ssl_vhost(void * servername、conn_rec * c、server_rec * s)+ {+ SSLSrvConfigRec * sc; + SSL * ssl; + BOOL found =FALSE; + apr_array_header_t * names; + int i; + + /*ServerNameを確認します*/+ if(!strcasecmp(servername、s-> server_hostname))+ found =TRUE; ++ / *まだ一致していない場合は、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; +} +} +} +} ++ / *それでも一致しない場合は、ServerAliasエントリを確認しますワイルドカード付き*/+ if(!found){+ names =s-> wild_names; + if(names){+ char ** name =(char **)names-> elts; + for(i =0; i <名前->ネルト;++i){+ if(!name [i ])続行; + if(!ap_strcasecmp_match(servername、name [i])){+ found =TRUE; + break; +} +} +} +} ++ / * SSL_CTXを設定(一致する場合)* / + if( found){+ 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)/*は発生しないはずです。 * / + 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)_TLS :SSL_TLSEXT_ERR_ALERT_FATAL; +} + return SSL_TLSEXT_ERR_NOACK; +} +#endif + /**モジュールごとの初期化*/@@ -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)+ {+ / * +*TLS拡張サポートの構成+*/ ++#ifndef OPENSSL_NO_TLSEXT + ap_log_error(APLOG_MARK、APLOG_DEBUG、0、s、+ "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、+ "サーバー名コールバックを初期化できません、不正なopensl (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:プロキシサポート? * / 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 / * *複数のSSL対応仮想サーバーが*同じIP:ポートを使用する場合に警告を出します。 mod_sslは常に@@-1079,6+1183,7 @@ "Init:名前ベースの" "仮想ホストを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(リビジョン423224)+++ httpd-2.2.x / modules / ssl / ssl_engine_kernel.c(作業コピー)@@ -231,7 +231,20@@*現在アクティブなもの。 * / +#ifndef OPENSSL_NO_TLSEXT / * +*別の仮想ホストとそのssl_ctx+に切り替えます*変更された場合は、再ネゴシエーションを強制します。+ * / + 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 ++ /**オーバーライドSSLCipherSuiteの**ここでは2つのオプションを提供します:@@ -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 @@ / *常に存在するHTTPS(=HTTP over SSL)フラグ! * / apr_table_setn(env、 "HTTPS"、 "on"); +#ifndef OPENSSL_NO_TLSEXT + / * SNI TLS拡張のコンテンツを追加(ClientHelloで提供されている場合)* / + if(servername =SSL_get_servername(ssl、TLSEXT_NAMETYPE_host_name))+ apr_table_set(env、 "TLS_SNI"、servername); +#endif +/*標準SSL環境変数*/if(dc-> nOptions&SSL_OPT_STDENVVARS){for(i =0; ssl_hook_Fixup_vars [i]; i ++){インデックス:httpd-2.2.x / modules / ssl / ssl_toolkit_compat.h ===================================================================--- httpd-2.2.x / modules / ssl / ssl_toolkit_compat.h(リビジョン423224)+++ httpd-2.2.x / modules / ssl / ssl_toolkit_compat.h(作業コピー)@@ -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 +#end>> 

ctrl+dを使用して終了します

cd apache2-2.2.3 /
patch –p1

バージョンを変更します。

cd debian /
dch –i

そして、1行目から5行目を次のように変更します。

 apache2(2.2.3-4a + etch)安定; urgency =low 
*有効なTLS拡張
-JohnDoe2007年11月5日火曜日06:29:54-0600

ソースパッケージを再コンパイルします。

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

pbuilderを使用してapache2をコンパイルします。

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

3。 OpenSSLのコンパイル-0.9.8g

お気に入りのエディタで/etc/apt/sources.listを編集し、配布にsidを使用して新しい行を追加します

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

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

ファイル/usr/src/openssl/openssl-0.9.8g/debian/rulesを編集し、22行目にenable-tlsextを追加して、次のようにします。

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

cd openssl-0.9.8g / debian /
dch -i

1〜5行目のバージョンを次のように変更します。

 openssl(0.9.8g-1)不安定; urgency =low 
*有効なTLS拡張
-JohnDoe2007年11月5日月曜日22:40:05-0600

ソースパッケージを再コンパイルします。

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

OpenSSLをpbuilderでコンパイルします。

pbuilderビルドopenssl_0.9.8g-1.dsc

新しくビルドされたパッケージをインストールします。

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

このコマンドを実行して、依存関係を修正します。

 apt-get install –f 

4。 1つのIPアドレスで複数の安全なWebサイトを許可するようにISPConfigを構成します

/home/admispconfig/ispconfig/lib/classes/ispconfig_isp_web.lib.phpを編集して、以下を検索します。

 /////////////////////////////// /////////////////////// // SSL Cert auf derIPExistiertのオブジェクトを確認します/////////////// /////////////////////////////////////// $ ssl_count =$ go_api-> db-> queryOneRecord ("SELECT count(doc_id)as ssl_co if($ ssl_count [" ssl_count "]> 1){// Es presentiert 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 =} 

次のようにコメントアウトします:

 /////////////////////////////// /////////////////////// // SSL Cert auf derIPExistiertのオブジェクトを確認します/////////////// /////////////////////////////////////// // $ ssl_count =$ go_api-> db-> queryOneRecord( "SELECT count(doc_id)as ssl_co // if($ ssl_count [" ssl_count "]> 1){// // Es presentiert 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 =//} 

同じファイルでもう一度検索し、コメントアウトします。

RFC4366に準拠していないブラウザを使用しているかどうかをユーザーが確認できるデフォルトの安全なサイトを作成します。

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-key192.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.key

必ず自分のパスワードを入力してください。
また、一般名にはアスタリスクの「*」を使用します。

/etc/apache2/apache2.confを編集し、これを上に配置します。/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  

SSLを有効にして複数のサイトを作成することをテストします。
サイトを正しく表示するには、RFC 4366準拠のブラウザが必要です。
ブラウザをテストするには、https://dave.sni.velox.chにアクセスしてください。 /そしてブラウザが機能するかどうかを確認します。

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


Panels
  1. cPanelでドメインのModSecurityを有効/無効にする方法

  2. 特定のサイトでgzip圧縮を有効にする方法

  3. nc を使用して複数の tcp 接続をリッスンする方法

  1. Debian –Ppc用のUSBDebianスクイーズディスクを作成する方法は?

  2. Dh_installinitを使用して1つのパッケージに2つのサービスをインストールすることは可能ですか?どのように?

  3. debian の gui をインストールする方法

  1. Debian9または10でSSHを有効にする方法

  2. cPanelからPHP拡張機能を有効/無効にする方法は?

  3. Apachesリバースプロキシ機能(Debian Etch)を使用してポート80でISPConfig2を実行する方法