comparison xml/ru/docs/http/configuring_https_servers.xml @ 660:ba45bd0fc71e

configuring_https_servers: markup changes (mostly).
author Ruslan Ermilov <ru@nginx.com>
date Tue, 28 Aug 2012 09:59:56 +0000
parents 77a3314c74a7
children e1579b244800
comparison
equal deleted inserted replaced
659:77a3314c74a7 660:ba45bd0fc71e
19 в блоке server, а также указать местоположение файлов с 19 в блоке server, а также указать местоположение файлов с
20 сертификатом сервера и секретным ключом: 20 сертификатом сервера и секретным ключом:
21 21
22 <programlisting> 22 <programlisting>
23 server { 23 server {
24 listen 443; 24 listen 443;
25 server_name www.example.com; 25 server_name www.example.com;
26 ssl on; 26 ssl <b>on</b>;
27 ssl_certificate www.example.com.crt; 27 ssl_certificate <b>www.example.com.crt</b>;
28 ssl_certificate_key www.example.com.key; 28 ssl_certificate_key <b>www.example.com.key</b>;
29 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 29 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
30 ssl_ciphers HIGH:!aNULL:!MD5; 30 ssl_ciphers HIGH:!aNULL:!MD5;
31 ... 31 ...
32 } 32 }
33 </programlisting> 33 </programlisting>
34 34
35 Сертификат сервера является публичным. 35 Сертификат сервера является публичным.
37 Секретный ключ следует хранить в файле с ограниченным доступом 37 Секретный ключ следует хранить в файле с ограниченным доступом
38 (права доступа должны позволять основному процессу nginx читать этот файл). 38 (права доступа должны позволять основному процессу nginx читать этот файл).
39 Секретный ключ можно также хранить в одном файле с сертификатом: 39 Секретный ключ можно также хранить в одном файле с сертификатом:
40 40
41 <programlisting> 41 <programlisting>
42 ssl_certificate www.example.com.cert; 42 ssl_certificate www.example.com.cert;
43 ssl_certificate_key www.example.com.cert; 43 ssl_certificate_key www.example.com.cert;
44 </programlisting> 44 </programlisting>
45 45
46 при этом права доступа к файлу следует также ограничить. 46 при этом права доступа к файлу следует также ограничить.
47 Несмотря на то, что и сертификат, и ключ хранятся в одном файле, 47 Несмотря на то, что и сертификат, и ключ хранятся в одном файле,
48 клиенту посылается только сертификат. 48 клиенту посылается только сертификат.
83 На мультипроцессорных системах следует запускать несколько рабочих процессов, 83 На мультипроцессорных системах следует запускать несколько рабочих процессов,
84 не меньше числа доступных процессорных ядер. 84 не меньше числа доступных процессорных ядер.
85 Наиболее ресурсоёмкой для процессора является операция SSL handshake, в рамках 85 Наиболее ресурсоёмкой для процессора является операция SSL handshake, в рамках
86 которой формируются криптографические параметры сессии. 86 которой формируются криптографические параметры сессии.
87 Существует два способа уменьшения числа этих операций, производимых для каждого 87 Существует два способа уменьшения числа этих операций, производимых для каждого
88 клиента: включение постоянных (keepalive) соединений, позволяющих в рамках 88 клиента: использование постоянных (keepalive) соединений, позволяющих в рамках
89 одного соединения обрабатывать сразу несколько запросов, и повторное 89 одного соединения обрабатывать сразу несколько запросов, и повторное
90 использование параметров SSL-сессии для предотвращения необходимости выполнения 90 использование параметров SSL-сессии для предотвращения необходимости выполнения
91 SSL handshake для параллельных и последующих соединений. 91 SSL handshake для параллельных и последующих соединений.
92 Сессии хранятся в кэше SSL-сессий, разделяемом между рабочими процессами и 92 Сессии хранятся в кэше SSL-сессий, разделяемом между рабочими процессами и
93 настраиваемом директивой 93 настраиваемом директивой
95 В 1 мегабайт кэша помещается около 4000 сессий. 95 В 1 мегабайт кэша помещается около 4000 сессий.
96 Таймаут кэша по умолчанию равен 5 минутам. 96 Таймаут кэша по умолчанию равен 5 минутам.
97 Он может быть увеличен с помощью директивы 97 Он может быть увеличен с помощью директивы
98 <link doc="ngx_http_ssl_module.xml" id="ssl_session_timeout"/>. 98 <link doc="ngx_http_ssl_module.xml" id="ssl_session_timeout"/>.
99 Вот пример конфигурации, оптимизированной под 4-ядерную систему 99 Вот пример конфигурации, оптимизированной под 4-ядерную систему
100 с 10M разделяемого кэша сессий: 100 с 10-мегабайтным разделяемым кэшем сессий:
101 101
102 <programlisting> 102 <programlisting>
103 <b>worker_processes 4</b>; 103 <b>worker_processes 4</b>;
104 104
105 http { 105 http {
106 <b>ssl_session_cache shared:SSL:10m</b>; 106 <b>ssl_session_cache shared:SSL:10m</b>;
107 <b>ssl_session_timeout 10m</b>; 107 <b>ssl_session_timeout 10m</b>;
108 108
109 server { 109 server {
110 listen 443; 110 listen 443;
111 server_name www.example.com; 111 server_name www.example.com;
112 <b>keepalive_timeout 70</b>; 112 <b>keepalive_timeout 70</b>;
113 113
114 ssl on; 114 ssl on;
115 ssl_certificate www.example.com.crt; 115 ssl_certificate www.example.com.crt;
116 ssl_certificate_key www.example.com.key; 116 ssl_certificate_key www.example.com.key;
117 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; 117 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
118 ssl_ciphers HIGH:!aNULL:!MD5; 118 ssl_ciphers HIGH:!aNULL:!MD5;
119 ... 119 ...
120 </programlisting> 120 </programlisting>
121 </para> 121 </para>
122 122
123 </section> 123 </section>
145 Полученный файл следует указать в директиве 145 Полученный файл следует указать в директиве
146 <link doc="ngx_http_ssl_module.xml" id="ssl_certificate"/>: 146 <link doc="ngx_http_ssl_module.xml" id="ssl_certificate"/>:
147 147
148 <programlisting> 148 <programlisting>
149 server { 149 server {
150 listen 443; 150 listen 443;
151 server_name www.example.com; 151 server_name www.example.com;
152 ssl on; 152 ssl on;
153 ssl_certificate www.example.com.chained.crt; 153 ssl_certificate www.example.com.chained.crt;
154 ssl_certificate_key www.example.com.key; 154 ssl_certificate_key www.example.com.key;
155 ... 155 ...
156 } 156 }
157 </programlisting> 157 </programlisting>
158 158
159 Если сертификат сервера и связка сертификатов были соединены в неправильном 159 Если сертификат сервера и связка сертификатов были соединены в неправильном
201 /OU=ValiCert Class 2 Policy Validation Authority 201 /OU=ValiCert Class 2 Policy Validation Authority
202 /CN=http://www.valicert.com//emailAddress=info@valicert.com 202 /CN=http://www.valicert.com//emailAddress=info@valicert.com
203 ... 203 ...
204 </programlisting> 204 </programlisting>
205 205
206 В этом примере субъект (&ldquo;<i>s</i>&rdquo;) сертификата №0 сервера 206 В этом примере субъект (“<i>s</i>”) сертификата №0 сервера
207 <literal>www.GoDaddy.com</literal> подписан издателем (&ldquo;<i>i</i>&rdquo;), 207 <literal>www.GoDaddy.com</literal> подписан издателем (“<i>i</i>”),
208 который в свою очередь является субъектом сертификата №1, подписанного 208 который в свою очередь является субъектом сертификата №1, подписанного
209 издателем, который в свою очередь является субъектом сертификата №2, 209 издателем, который в свою очередь является субъектом сертификата №2,
210 подписанного общеизвестным издателем <i>ValiCert, Inc.</i>, 210 подписанного общеизвестным издателем <i>ValiCert, Inc.</i>,
211 чей сертификат хранится во встроенной в браузеры базе данных 211 чей сертификат хранится во встроенной в браузеры базе данных
212 сертификатов (которая в тёмном чулане хранится в доме, который построил Джек). 212 сертификатов (которая в тёмном чулане хранится в доме, который построил Джек).
222 222
223 <section id="single_http_https_server" name="Единый HTTP/HTTPS сервер"> 223 <section id="single_http_https_server" name="Единый HTTP/HTTPS сервер">
224 224
225 <para> 225 <para>
226 Если серверы HTTP и HTTPS идентичны, 226 Если серверы HTTP и HTTPS идентичны,
227 можно настроить единый сервер, который обслуживает 227 можно настроить единый сервер, который обслуживает как HTTP-,
228 как HTTP-, так и HTTPS-запросы. 228 так и HTTPS-запросы.
229 Для этого следует исключить директиву “<literal>ssl on</literal>” 229 Для этого следует исключить директиву “<literal>ssl on</literal>”
230 и добавить параметр <literal>ssl</literal> к порту *:443: 230 и добавить параметр <literal>ssl</literal> к порту *:443:
231 231
232 <programlisting> 232 <programlisting>
233 server { 233 server {
234 listen 80; 234 listen 80;
235 listen 443 ssl; 235 listen 443 ssl;
236 server_name www.example.com; 236 server_name www.example.com;
237 ssl_certificate www.example.com.crt; 237 ssl_certificate www.example.com.crt;
238 ssl_certificate_key www.example.com.key; 238 ssl_certificate_key www.example.com.key;
239 ... 239 ...
240 } 240 }
241 </programlisting> 241 </programlisting>
242 242
243 <note> 243 <note>
258 Типичная проблема возникает при настройке двух и более серверов HTTPS, 258 Типичная проблема возникает при настройке двух и более серверов HTTPS,
259 слушающих на одном и том же IP-адресе: 259 слушающих на одном и том же IP-адресе:
260 260
261 <programlisting> 261 <programlisting>
262 server { 262 server {
263 listen 443; 263 listen 443;
264 server_name www.example.com; 264 server_name www.example.com;
265 ssl on; 265 ssl on;
266 ssl_certificate www.example.com.crt; 266 ssl_certificate www.example.com.crt;
267 ... 267 ...
268 } 268 }
269 269
270 server { 270 server {
271 listen 443; 271 listen 443;
272 server_name www.example.org; 272 server_name www.example.org;
273 ssl on; 273 ssl on;
274 ssl_certificate www.example.org.crt; 274 ssl_certificate www.example.org.crt;
275 ... 275 ...
276 } 276 }
277 </programlisting> 277 </programlisting>
278 278
279 В такой конфигурации браузер получит сертификат первого сервера, т.е. 279 В такой конфигурации браузер получит сертификат сервера по умолчанию, т.е.
280 <literal>www.example.com</literal>, независимо от запрашиваемого имени сервера. 280 <literal>www.example.com</literal>, независимо от запрашиваемого имени сервера.
281 Это связано с поведением протокола SSL. 281 Это связано с поведением протокола SSL.
282 SSL-соединение устанавливается до того, как браузер посылает HTTP-запрос, 282 SSL-соединение устанавливается до того, как браузер посылает HTTP-запрос,
283 и nginx не знает имени запрашиваемого сервера. 283 и nginx не знает имени запрашиваемого сервера.
284 Следовательно, он лишь может предложить сертификат сервера по умолчанию. 284 Следовательно, он лишь может предложить сертификат сервера по умолчанию.
288 Наиболее старым и надёжным способом решения этой проблемы 288 Наиболее старым и надёжным способом решения этой проблемы
289 является назначение каждому HTTPS-серверу своего IP-адреса: 289 является назначение каждому HTTPS-серверу своего IP-адреса:
290 290
291 <programlisting> 291 <programlisting>
292 server { 292 server {
293 listen 192.168.1.1:443; 293 listen 192.168.1.1:443;
294 server_name www.example.com; 294 server_name www.example.com;
295 ssl on; 295 ssl on;
296 ssl_certificate www.example.com.crt; 296 ssl_certificate www.example.com.crt;
297 ... 297 ...
298 } 298 }
299 299
300 server { 300 server {
301 listen 192.168.1.2:443; 301 listen 192.168.1.2:443;
302 server_name www.example.org; 302 server_name www.example.org;
303 ssl on; 303 ssl on;
304 ssl_certificate www.example.org.crt; 304 ssl_certificate www.example.org.crt;
305 ... 305 ...
306 } 306 }
307 </programlisting> 307 </programlisting>
308 </para> 308 </para>
309 309
310 </section> 310 </section>
311 311
312 312
313 <section id="certificate_with_several_names" 313 <section id="certificate_with_several_names"
314 name="SSL-сертификат с несколькими именами"> 314 name="SSL-сертификат с несколькими именами">
315 315
316 <para> 316 <para>
317 Существуют и другие способы, которые позволяют использовать один и тот же 317 Существуют и другие способы, которые позволяют использовать один и тот же
318 IP-адрес сразу для нескольких HTTPS-серверов. 318 IP-адрес сразу для нескольких HTTPS-серверов.
319 Все они, однако, имеют свои недостатки. 319 Все они, однако, имеют свои недостатки.
320 Одним из таких способов является использование сертификата с несколькими 320 Одним из таких способов является использование сертификата с несколькими
321 именами в поле SubjectAltName сертификата, например <literal>www.example.com</literal> 321 именами в поле SubjectAltName сертификата, например
322 и <literal>www.example.org</literal>. 322 <literal>www.example.com</literal> и <literal>www.example.org</literal>.
323 Однако, длина поля SubjectAltName ограничена. 323 Однако, длина поля SubjectAltName ограничена.
324 </para> 324 </para>
325 325
326 <para> 326 <para>
327 Другим способом является использование wildcard-сертификата, например 327 Другим способом является использование wildcard-сертификата, например
330 на заданном уровне. 330 на заданном уровне.
331 Под такой сертификат подходит <literal>www.example.org</literal>, но не подходят 331 Под такой сертификат подходит <literal>www.example.org</literal>, но не подходят
332 <literal>example.org</literal> и <literal>www.sub.example.org</literal>. 332 <literal>example.org</literal> и <literal>www.sub.example.org</literal>.
333 Два вышеуказанных способа можно комбинировать. 333 Два вышеуказанных способа можно комбинировать.
334 Сертификат может одновременно содержать и точное, и wildcard имена в поле 334 Сертификат может одновременно содержать и точное, и wildcard имена в поле
335 SubjectAltName, например <literal>example.org</literal> и <literal>*.example.org</literal>. 335 SubjectAltName, например
336 <literal>example.org</literal> и <literal>*.example.org</literal>.
336 </para> 337 </para>
337 338
338 <para> 339 <para>
339 Лучше поместить сведения о файле сертификата с несколькими именами и 340 Лучше поместить сведения о файле сертификата с несколькими именами и
340 файле с его секретным ключом на уровне конфигурации <i>http</i>, чтобы 341 файле с его секретным ключом на уровне конфигурации <i>http</i>, чтобы
341 все серверы унаследовали их единственную копию в памяти: 342 все серверы унаследовали их единственную копию в памяти:
342 343
343 <programlisting> 344 <programlisting>
344 ssl_certificate common.crt; 345 ssl_certificate common.crt;
345 ssl_certificate_key common.key; 346 ssl_certificate_key common.key;
346 347
347 server { 348 server {
348 listen 443; 349 listen 443;
349 server_name www.example.com; 350 server_name www.example.com;
350 ssl on; 351 ssl on;
351 ... 352 ...
352 } 353 }
353 354
354 server { 355 server {
355 listen 443; 356 listen 443;
356 server_name www.example.org; 357 server_name www.example.org;
357 ssl on; 358 ssl on;
358 ... 359 ...
359 } 360 }
360 </programlisting> 361 </programlisting>
361 </para> 362 </para>
362 363
408 </para> 409 </para>
409 410
410 <para> 411 <para>
411 Чтобы использовать SNI в nginx, соответствующая поддержка должна 412 Чтобы использовать SNI в nginx, соответствующая поддержка должна
412 присутствовать как в библиотеке OpenSSL, использованной при сборке 413 присутствовать как в библиотеке OpenSSL, использованной при сборке
413 бинарного файла nginx, так и в библиотеке, подгружаемой в момент 414 бинарного файла nginx, так и в библиотеке, подгружаемой в момент работы.
414 работы.
415 OpenSSL поддерживает SNI начиная с версии 0.9.8f, если она была 415 OpenSSL поддерживает SNI начиная с версии 0.9.8f, если она была
416 собрана с опцией конфигурации <nobr>&ldquo;--enable-tlsext&rdquo;.</nobr> 416 собрана с опцией конфигурации <nobr>“--enable-tlsext”.</nobr>
417 Начиная с OpenSSL 0.9.8j эта опция включена по умолчанию. 417 Начиная с OpenSSL 0.9.8j эта опция включена по умолчанию.
418 Если nginx был собран с поддержкой SNI, то при запуске nginx с ключом 418 Если nginx был собран с поддержкой SNI, то при запуске nginx с ключом
419 &ldquo;-V&rdquo; об этом сообщается: 419 “-V” об этом сообщается:
420 420
421 <programlisting> 421 <programlisting>
422 $ nginx -V 422 $ nginx -V
423 ... 423 ...
424 TLS SNI support enabled 424 TLS SNI support enabled
442 442
443 <para> 443 <para>
444 <list type="bullet"> 444 <list type="bullet">
445 445
446 <listitem> 446 <listitem>
447 Статус поддержки SNI отображается по ключу &ldquo;-V&rdquo; 447 Статус поддержки SNI отображается по ключу “-V”
448 начиная с версий 0.8.21 и 0.7.62. 448 начиная с версий 0.8.21 и 0.7.62.
449 </listitem> 449 </listitem>
450 450
451 <listitem> 451 <listitem>
452 Параметр <literal>ssl</literal> директивы 452 Параметр <literal>ssl</literal> директивы