comparison xml/ja/docs/http/configuring_https_servers.xml @ 490:9913f1d51c07

Replaced "nginx" domain names with example domains.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 19 Apr 2012 12:30:24 +0000
parents 6135f3c95bf6
children 130fad6dc1b4
comparison
equal deleted inserted replaced
489:2abd1998a0cc 490:9913f1d51c07
12 HTTPS サーバを設定するには server ブロックで SSL プロトコルを有効にして、サーバ証明書ファイルと秘密鍵ファイルの場所を指定する必要があります: 12 HTTPS サーバを設定するには server ブロックで SSL プロトコルを有効にして、サーバ証明書ファイルと秘密鍵ファイルの場所を指定する必要があります:
13 13
14 <programlisting> 14 <programlisting>
15 server { 15 server {
16 listen 443; 16 listen 443;
17 server_name www.nginx.com; 17 server_name www.example.com;
18 ssl on; 18 ssl on;
19 ssl_certificate www.nginx.com.crt; 19 ssl_certificate www.example.com.crt;
20 ssl_certificate_key www.nginx.com.key; 20 ssl_certificate_key www.example.com.key;
21 ssl_protocols SSLv3 TLSv1; 21 ssl_protocols SSLv3 TLSv1;
22 ssl_ciphers HIGH:!ADH:!MD5; 22 ssl_ciphers HIGH:!ADH:!MD5;
23 ... 23 ...
24 } 24 }
25 </programlisting> 25 </programlisting>
26 26
27 サーバ証明書とはドメインの所有者情報や、送信情報の暗号化に必要な公開鍵を含む電子証明書です。そのサーバに接続するすべてのクライアントに送られます。秘密鍵はサーバ証明書に含まれる公開鍵で暗号化された情報を復号するために必要な鍵で、秘匿する必要が有ります。アクセスを制限したファイルに保存するようにしてください。ただし、nginx のマスタープロセスからは読めるようにする必要があります。もうひとつの方法として、秘密鍵は証明書と同じファイルに保存することもできます: 27 サーバ証明書とはドメインの所有者情報や、送信情報の暗号化に必要な公開鍵を含む電子証明書です。そのサーバに接続するすべてのクライアントに送られます。秘密鍵はサーバ証明書に含まれる公開鍵で暗号化された情報を復号するために必要な鍵で、秘匿する必要が有ります。アクセスを制限したファイルに保存するようにしてください。ただし、nginx のマスタープロセスからは読めるようにする必要があります。もうひとつの方法として、秘密鍵は証明書と同じファイルに保存することもできます:
28 28
29 <programlisting> 29 <programlisting>
30 ssl_certificate www.nginx.com.cert; 30 ssl_certificate www.example.com.cert;
31 ssl_certificate_key www.nginx.com.cert; 31 ssl_certificate_key www.example.com.cert;
32 </programlisting> 32 </programlisting>
33 33
34 この場合もファイルのアクセス権は制限するようにします。証明書と秘密鍵がひとつのファイルに保存されていても、証明書だけがクライアントに送られます。 34 この場合もファイルのアクセス権は制限するようにします。証明書と秘密鍵がひとつのファイルに保存されていても、証明書だけがクライアントに送られます。
35 </para> 35 </para>
36 36
54 <b>ssl_session_cache shared:SSL:10m</b>; 54 <b>ssl_session_cache shared:SSL:10m</b>;
55 <b>ssl_session_timeout 10m</b>; 55 <b>ssl_session_timeout 10m</b>;
56 56
57 server { 57 server {
58 listen 443; 58 listen 443;
59 server_name www.nginx.com; 59 server_name www.example.com;
60 <b>keepalive_timeout 70</b>; 60 <b>keepalive_timeout 70</b>;
61 61
62 ssl on; 62 ssl on;
63 ssl_certificate www.nginx.com.crt; 63 ssl_certificate www.example.com.crt;
64 ssl_certificate_key www.nginx.com.key; 64 ssl_certificate_key www.example.com.key;
65 ssl_protocols SSLv3 TLSv1; 65 ssl_protocols SSLv3 TLSv1;
66 ssl_ciphers HIGH:!ADH:!MD5; 66 ssl_ciphers HIGH:!ADH:!MD5;
67 ... 67 ...
68 </programlisting> 68 </programlisting>
69 </para> 69 </para>
75 75
76 <para> 76 <para>
77 ブラウザによっては有名な認証局によって署名された証明書にエラーをだすことがあります。その一方でその証明書を他のブラウザでは問題なく受け入れることもあります。これは発行している認証局が、有名で信用されている認証局の認証基盤には含まれない特定のブラウザで配布されている中間証明書を使ったサーバ証明書に署名しているからです。このケースでは、認証局は署名されたサーバ証明書に連結されているはずの連鎖証明書のバンドルを提供しています。サーバ証明書は、かならず結合されたファイル内の連鎖証明書に存在している必要があります: 77 ブラウザによっては有名な認証局によって署名された証明書にエラーをだすことがあります。その一方でその証明書を他のブラウザでは問題なく受け入れることもあります。これは発行している認証局が、有名で信用されている認証局の認証基盤には含まれない特定のブラウザで配布されている中間証明書を使ったサーバ証明書に署名しているからです。このケースでは、認証局は署名されたサーバ証明書に連結されているはずの連鎖証明書のバンドルを提供しています。サーバ証明書は、かならず結合されたファイル内の連鎖証明書に存在している必要があります:
78 78
79 <programlisting> 79 <programlisting>
80 $ cat www.nginx.com.crt bundle.crt > www.nginx.com.chained.crt 80 $ cat www.example.com.crt bundle.crt > www.example.com.chained.crt
81 </programlisting> 81 </programlisting>
82 82
83 この結合されたファイルを <literal>ssl_certificate</literal> ディレクティブで使われるようにします: 83 この結合されたファイルを <literal>ssl_certificate</literal> ディレクティブで使われるようにします:
84 84
85 <programlisting> 85 <programlisting>
86 server { 86 server {
87 listen 443; 87 listen 443;
88 server_name www.nginx.com; 88 server_name www.example.com;
89 ssl on; 89 ssl on;
90 ssl_certificate www.nginx.com.chained.crt; 90 ssl_certificate www.example.com.chained.crt;
91 ssl_certificate_key www.nginx.com.key; 91 ssl_certificate_key www.example.com.key;
92 ... 92 ...
93 } 93 }
94 </programlisting> 94 </programlisting>
95 95
96 サーバ証明書とバンドルされたものが間違った順序で連結されていた場合、nginx は起動に失敗して次のエラーメッセージを表示します: 96 サーバ証明書とバンドルされたものが間違った順序で連結されていた場合、nginx は起動に失敗して次のエラーメッセージを表示します:
97 97
98 <programlisting> 98 <programlisting>
99 SSL_CTX_use_PrivateKey_file(" ... /www.nginx.com.key") failed 99 SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
100 (SSL: error:0B080074:x509 certificate routines: 100 (SSL: error:0B080074:x509 certificate routines:
101 X509_check_private_key:key values mismatch) 101 X509_check_private_key:key values mismatch)
102 </programlisting> 102 </programlisting>
103 103
104 これは、nginx がサーバ証明書ではなくバンドルされた最初の証明書で秘密鍵を使おうとするからです。 104 これは、nginx がサーバ証明書ではなくバンドルされた最初の証明書で秘密鍵を使おうとするからです。
150 150
151 <programlisting> 151 <programlisting>
152 server { 152 server {
153 listen 80; 153 listen 80;
154 listen 443 ssl; 154 listen 443 ssl;
155 server_name www.nginx.com; 155 server_name www.example.com;
156 ssl_certificate www.nginx.com.crt; 156 ssl_certificate www.example.com.crt;
157 ssl_certificate_key www.nginx.com.key; 157 ssl_certificate_key www.example.com.key;
158 ... 158 ...
159 } 159 }
160 </programlisting> 160 </programlisting>
161 161
162 <note> 162 <note>
176 単一の IP アドレスを2つ以上の HTTPS サーバで待ち受けるように設定するとよく発生する問題があります: 176 単一の IP アドレスを2つ以上の HTTPS サーバで待ち受けるように設定するとよく発生する問題があります:
177 177
178 <programlisting> 178 <programlisting>
179 server { 179 server {
180 listen 443; 180 listen 443;
181 server_name www.nginx.com; 181 server_name www.example.com;
182 ssl on; 182 ssl on;
183 ssl_certificate www.nginx.com.crt; 183 ssl_certificate www.example.com.crt;
184 ... 184 ...
185 } 185 }
186 186
187 server { 187 server {
188 listen 443; 188 listen 443;
189 server_name www.nginx.org; 189 server_name www.example.org;
190 ssl on; 190 ssl on;
191 ssl_certificate www.nginx.org.crt; 191 ssl_certificate www.example.org.crt;
192 ... 192 ...
193 } 193 }
194 </programlisting> 194 </programlisting>
195 195
196 この設定では、ブラウザはリクエストされたサーバ名に関わらずデフォルトサーバ、すなわちここでは <url>www.nginx.com</url> の証明書を受信します。これは SSL プロトコルの作用によるものです。この SSL 接続はブラウザが HTTP リクエストを送る前に確立されるので、nginx にはリクエストされたサーバ名は分かりません。したがって、デフォルトサーバの証明書を送ることしかできません。 196 この設定では、ブラウザはリクエストされたサーバ名に関わらずデフォルトサーバ、すなわちここでは <url>www.example.com</url> の証明書を受信します。これは SSL プロトコルの作用によるものです。この SSL 接続はブラウザが HTTP リクエストを送る前に確立されるので、nginx にはリクエストされたサーバ名は分かりません。したがって、デフォルトサーバの証明書を送ることしかできません。
197 </para> 197 </para>
198 198
199 <para> 199 <para>
200 この問題を解決するもっとも古くてもっとも堅実な方法は、各 HTTPS サーバに別個の IP アドレスを割り当てることです: 200 この問題を解決するもっとも古くてもっとも堅実な方法は、各 HTTPS サーバに別個の IP アドレスを割り当てることです:
201 201
202 <programlisting> 202 <programlisting>
203 server { 203 server {
204 listen 192.168.1.1:443; 204 listen 192.168.1.1:443;
205 server_name www.nginx.com; 205 server_name www.example.com;
206 ssl on; 206 ssl on;
207 ssl_certificate www.nginx.com.crt; 207 ssl_certificate www.example.com.crt;
208 ... 208 ...
209 } 209 }
210 210
211 server { 211 server {
212 listen 192.168.1.2:443; 212 listen 192.168.1.2:443;
213 server_name www.nginx.org; 213 server_name www.example.org;
214 ssl on; 214 ssl on;
215 ssl_certificate www.nginx.org.crt; 215 ssl_certificate www.example.org.crt;
216 ... 216 ...
217 } 217 }
218 </programlisting> 218 </programlisting>
219 </para> 219 </para>
220 220
223 223
224 <section id="certificate_with_several_names" 224 <section id="certificate_with_several_names"
225 name="複数サーバ名をもつ SSL 証明書"> 225 name="複数サーバ名をもつ SSL 証明書">
226 226
227 <para> 227 <para>
228 単一の IP アドレスを複数の HTTPS サーバ間で共有する方法は他にもありますが、どれも欠点があります。ひとつは、SubjectAltName フィールドに複数サーバ名(例えば、<url>www.nginx.com</url> と <url>www.nginx.org</url>)をもつ単一の証明書を使用する方法です。しかし、SubjectAltName の長さには制限があります。 228 単一の IP アドレスを複数の HTTPS サーバ間で共有する方法は他にもありますが、どれも欠点があります。ひとつは、SubjectAltName フィールドに複数サーバ名(例えば、<url>www.example.com</url> と <url>www.example.org</url>)をもつ単一の証明書を使用する方法です。しかし、SubjectAltName の長さには制限があります。
229 </para> 229 </para>
230 230
231 <para> 231 <para>
232 もうひとつの方法は、例えば <url>*.nginx.org</url> のようにワイルドカード名を持った証明書を使用する方法です。この証明書は <url>www.nginx.org</url> にマッチしますが <url>nginx.org</url> や <url>www.sub.nginx.org</url> にはマッチしません。以上の二つの方法は組み合わせることもできます。証明書には、例えば <url>nginx.org</url> と <url>*.nginx.org</url> のように SubjectAltName フィールドに完全一致名とワイルドカード名を含ませることができます。 232 もうひとつの方法は、例えば <url>*.example.org</url> のようにワイルドカード名を持った証明書を使用する方法です。この証明書は <url>www.example.org</url> にマッチしますが <url>example.org</url> や <url>www.sub.example.org</url> にはマッチしません。以上の二つの方法は組み合わせることもできます。証明書には、例えば <url>example.org</url> と <url>*.example.org</url> のように SubjectAltName フィールドに完全一致名とワイルドカード名を含ませることができます。
233 </para> 233 </para>
234 234
235 <para> 235 <para>
236 すべてのサーバでひとつのメモリーコピーを継承するためには、複数サーバ名を持つ証明書ファイルとその秘密鍵ファイルを設定の <i>http</i> レベルに置くとよいでしょう: 236 すべてのサーバでひとつのメモリーコピーを継承するためには、複数サーバ名を持つ証明書ファイルとその秘密鍵ファイルを設定の <i>http</i> レベルに置くとよいでしょう:
237 237
239 ssl_certificate common.crt; 239 ssl_certificate common.crt;
240 ssl_certificate_key common.key; 240 ssl_certificate_key common.key;
241 241
242 server { 242 server {
243 listen 443; 243 listen 443;
244 server_name www.nginx.com; 244 server_name www.example.com;
245 ssl on; 245 ssl on;
246 ... 246 ...
247 } 247 }
248 248
249 server { 249 server {
250 listen 443; 250 listen 443;
251 server_name www.nginx.org; 251 server_name www.example.org;
252 ssl on; 252 ssl on;
253 ... 253 ...
254 } 254 }
255 </programlisting> 255 </programlisting>
256 </para> 256 </para>