comparison xml/tr/docs/http/configuring_https_servers.xml @ 0:61e04fc01027

Initial import of the nginx.org website.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 11 Aug 2011 12:19:13 +0000
parents
children 9d544687d02c
comparison
equal deleted inserted replaced
-1:000000000000 0:61e04fc01027
1 <!DOCTYPE digest SYSTEM "../../../../dtd/article.dtd">
2
3 <article title="HTTPS sunucularının yapılandırılması"
4 link="/tr/docs/http/configuring_https_servers.html"
5 lang="tr"
6 author="Igor Sysoev"
7 translator="Altan Tanrıverdi">
8
9 <section>
10
11 <para>
12 Bir HTTPS sunucusunu yapılandırmak için, server bloğu içerisinde SSL&rsquo;i etkin hale getirmeli ve sunucu sertifikası ve özel anahtar dosyaları belirtmelisiniz:
13
14 <programlisting>
15 server {
16 listen 443;
17 server_name www.nginx.com;
18 ssl on;
19 ssl_certificate www.nginx.com.crt;
20 ssl_certificate_key www.nginx.com.key;
21 ssl_protocols SSLv3 TLSv1;
22 ssl_ciphers HIGH:!ADH:!MD5;
23 ...
24 }
25 </programlisting>
26
27 Sunucu sertifikası herkese açık bir birimdir. Sunucuya bağlanan her istemciye gönderilir. Özel anahtar ise gizli bir birimdir ve erişimi engellenmiş bir alanda saklanır. Ancak nginx&rsquo;in ana işlemi tarafından okunabilir olmalıdır. Özel anahtar, alternatif olarak sertifika ile aynı dosya içerisinde saklanabilir:
28
29 <programlisting>
30 ssl_certificate www.nginx.com.cert;
31 ssl_certificate_key www.nginx.com.cert;
32 </programlisting>
33
34 Bu durumda dosya erişimi kısıtlanmalıdır. Aynı dosyada yer alsalar da istemciye sadece sertifika gönderilir.
35 </para>
36
37 <para>
38 <dirname>ssl_protocols</dirname> ve <dirname>ssl_ciphers</dirname> yönergeleri, güçlü SSL protokol ve şifrelere (cipher) yapılan bağlantılara limit koymak için kullanılır. Versiyon 0.8.20 ile birlikte nginx, <dirname>ssl_protocols SSLv3 TLSv1</dirname> ve <dirname>ssl_ciphers HIGH:!ADH:!MD5</dirname> yönergelerini varsayılan olarak kullanır, bu nedenle sadece daha önceki versiyonlarda yapılandırmaya eklenmelidir.
39 </para>
40
41 </section>
42
43
44 <section name="optimization" title="HTTPS sunucu optimizasyonu">
45
46 <para>
47 SSL işlemleri ekstra işlemci (CPU) kaynakları tüketir. Çok-işlemcili sistemlerde birçok işçi işlemler yürütmelisiniz: Mevcut işlemci çekirdek sayısından az olmamalı. En yoğun işlemci-yoğun işlem SSL el sıkışmalarıdır (ÇN: SSL Handshake, kısaca sunucuda bulunan sertifikanın istemci bilgisayar tarafından onaylanması ve tekrar sunucuya bildirilmesi sürecidir). Her bir istemci için mevcut bu işlemlerin sayısını azaltmanın iki yolu vardır: İlki, keep-alive bağlantıları olanaklı kılarak bir çok talebi sadece bir bağlantı ile göndermek ve ikincisi ise SSL oturum parametrelerini tekrar kullanarak paralel ve izleyen (subsequent) bağlantılar için SSL el sıkışmalarından kaçınmaktır.
48
49 Oturumlar, bir <dirname>ssl_session_cache</dirname> yönergesi tarafından yapılandırılan ve işçiler arasında paylaştırılmış bir SSL oturum önbelleğinde yer alır. Bir megabyte önbellek yaklaşık 4000 oturum içerir. Varsayılan önbellek zaman aşımı 5 dakikadır. <dirname>ssl_session_timeout</dirname> yönergesi ile bu süre arttırılabilir. 10M paylaşımlı oturum önbelleğine sahip bir quad core sistem için örnek yapılandırma:
50
51 <programlisting>
52 <b>worker_processes 4</b>;
53
54 http {
55 <b>ssl_session_cache shared:SSL:10m</b>;
56 <b>ssl_session_timeout 10m</b>;
57
58 server {
59 listen 443;
60 server_name www.nginx.com;
61 <b>keepalive_timeout 70</b>;
62
63 ssl on;
64 ssl_certificate www.nginx.com.crt;
65 ssl_certificate_key www.nginx.com.key;
66 ssl_protocols SSLv3 TLSv1;
67 ssl_ciphers HIGH:!ADH:!MD5;
68 ...
69 </programlisting>
70 </para>
71
72 </section>
73
74
75 <section name="chains" title="SSL sertifika zincirleri">
76
77 <para>
78 Bazı tarayıcılar popüler bir sertifika otoritesi tarafından imzalanmış sertifikaları sorunsuz kabul ederken, diğerleri sorun çıkarabilir. Bunun nedeni sertifika otoritesinin, sunucu sertifikasını, güvenilir sertifika veri tabanında yer almayan aracı bir sertifikayı kullanarak imzalamış olmasıdır. Bu durumda otorite, imzalanmış sertifikaya art arda bağlanması gereken bir dizi sertifika zinciri sunar. Bir araya geldikleri dosyada ilk önce sunucu sertifikası daha sonra zincirlenmiş sertifikalar yer almalıdır:
79
80 <programlisting>
81 $ cat www.nginx.com.crt bundle.crt > www.nginx.com.chained.crt
82 </programlisting>
83
84 Oluşan dosya <dirname>ssl_certificate</dirname> yönergesi içinde kullanılmalıdır:
85
86 <programlisting>
87 server {
88 listen 443;
89 server_name www.nginx.com;
90 ssl on;
91 ssl_certificate www.nginx.com.chained.crt;
92 ssl_certificate_key www.nginx.com.key;
93 ...
94 }
95 </programlisting>
96
97 Eğer bu art arda diziliş yanlış yapılmış olursa, nginx başlamayacak ve aşağıdakine benzer bir hata mesajını verecektir:
98
99 <programlisting>
100 SSL_CTX_use_PrivateKey_file(" ... /www.nginx.com.key") failed
101 (SSL: error:0B080074:x509 certificate routines:
102 X509_check_private_key:key values mismatch)
103 </programlisting>
104
105 Bu durum, nginx&rsquo;in sunucu sertifikası yerine zincirlenmiş sertifikaların ilkinin özel anahtarını kullanmaya çalışması sonucu oluşur.
106 </para>
107
108 <para>
109 Tarayıcılar, güvenilir otoriteler tarafından imzalanmış aracı sertifikaları genellikle depolarlar. Bu nedenle tarayıcı aracı sertifikaları daha önceden depolamış olabileceğinden zincirlenmiş sertifikalara ihtiyaç duymadan sertifika hakkında uyarı vermezler. Diğer taraftan sunucunun sertifika zincir dizisini tam olarak gönderdiğinden emin olmak için <path>openssl</path> komutunu kullanabilirsiniz:
110
111 <programlisting>
112 $ openssl s_client -connect www.godaddy.com:443
113 ...
114 Certificate chain
115 0 s:/C=US/ST=Arizona/L=Scottsdale/1.3.6.1.4.1.311.60.2.1.3=US
116 /1.3.6.1.4.1.311.60.2.1.2=AZ/O=GoDaddy.com, Inc
117 /OU=MIS Department/<b>CN=www.GoDaddy.com</b>
118 /serialNumber=0796928-7/2.5.4.15=V1.0, Clause 5.(b)
119 i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.
120 /OU=http://certificates.godaddy.com/repository
121 /CN=Go Daddy Secure Certification Authority
122 /serialNumber=07969287
123 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.
124 /OU=http://certificates.godaddy.com/repository
125 /CN=Go Daddy Secure Certification Authority
126 /serialNumber=07969287
127 i:/C=US/O=The Go Daddy Group, Inc.
128 /OU=Go Daddy Class 2 Certification Authority
129 2 s:/C=US/O=The Go Daddy Group, Inc.
130 /OU=Go Daddy Class 2 Certification Authority
131 i:/L=ValiCert Validation Network/O=<b>ValiCert, Inc.</b>
132 /OU=ValiCert Class 2 Policy Validation Authority
133 /CN=http://www.valicert.com//emailAddress=info@valicert.com
134 ...
135 </programlisting>
136
137 Bu örnekte <url>www.GoDaddy.com</url> sunucu sertifikasının (server certificate #0) &ldquo;<i>s</i>&rdquo; ile belirtilen konusu (subject), &ldquo;<i>i</i>&rdquo; ile gösterilen ve aynı zamanda kendisi de sonraki sertifikanın (certificate #1) konusu (subject) olan, sertifikayı veren/yayınlayan (issuer) tarafından imzalanır. Sonraki sertifika (certificate #1) ise bir sonraki sertifika (certificate #2) tarafından imzalanmıştır ve bu son sertifika <i>ValiCert, Inc.</i> tarafından imzalanmıştır. Bu firmanın sertifikası, tarayıcının kurulumuyla gelen sertifika veritabanında bulunur.
138 </para>
139
140 <para>
141 Eğer sertifika dizisi eklemediyseniz, yalnızca bir sunucu sertifikası görürsünüz (server certificate #0).
142 </para>
143
144 </section>
145
146
147 <section name="single_http_https_server" title="Tekil HTTP/HTTPS sunucusu">
148
149 <para>
150 En baştan HTTP ve HTTPS protokollerini ayrı yapılandırmak en iyisidir. Mevcut durumda fonksiyonellikleri aynı gözükmekle birlikte, bu gelecekte önemli bir şekilde değişebilir ve birleştirilmiş bir sunucu problemli olabilir. Ancak, eğer HTTP ve HTTPS sunucuları eşit ise ve geleceği düşünmek istemiyorsanız, <dirname>ssl on</dirname> yönergesini silerek ve *:443 portu için <dirname>ssl</dirname> parametresi ekleyerek, HTTP ve HTTPS taleplerini tutan yalnızca bir sunucu yapılandırabilirsiniz:
151
152 <programlisting>
153 server {
154 listen 80;
155 listen 443 ssl;
156 server_name www.nginx.com;
157 ssl_certificate www.nginx.com.crt;
158 ssl_certificate_key www.nginx.com.key;
159 ...
160 }
161 </programlisting>
162
163 <note>
164 Versiyon 0.8.21 öncesi, nginx yalnızca <dirname>default</dirname> parametresine sahip listen soketlerinde <dirname>ssl</dirname> parametresinin eklenmesine izin veriyordu:
165 <programlisting>
166 listen 443 default ssl;
167 </programlisting>
168 </note>
169 </para>
170
171 </section>
172
173
174 <section name="name_based_https_servers" title="Ad tabanlı HTTPS sunucuları">
175
176 <para>
177 Bir IP adresini dinleyen iki veya daha fazla HTTPS sunucusunu yapılandırdığınız zaman genel bir problem ortaya çıkar:
178
179 <programlisting>
180 server {
181 listen 443;
182 server_name www.nginx.com;
183 ssl on;
184 ssl_certificate www.nginx.com.crt;
185 ...
186 }
187
188 server {
189 listen 443;
190 server_name www.nginx.org;
191 ssl on;
192 ssl_certificate www.nginx.org.crt;
193 ...
194 }
195 </programlisting>
196
197 Bu yapılandırmada, bir tarayıcı talep edilen sunucuya bakmadan, varsayılan sunucunun sertifikasını alır, örneğin: <url>www.nginx.com</url>. Bu SSL protokolüne özgü bir durumdan kaynaklanır. SSL bağlantısı, tarayıcının HTTP talebi göndermesinden önce kurulur ve nginx talep edilen sunucunun adını bilmez. Bu nedenle yalnızca varsayılan sunucunun sertifikasını önerir.
198 </para>
199
200 <para>
201 Bu problemi çözmenin en eski ve sağlam methodu HTTPS sunucularının her birine ayrı IP adresleri atamaktır:
202
203 <programlisting>
204 server {
205 listen 192.168.1.1:443;
206 server_name www.nginx.com;
207 ssl on;
208 ssl_certificate www.nginx.com.crt;
209 ...
210 }
211
212 server {
213 listen 192.168.1.2:443;
214 server_name www.nginx.org;
215 ssl on;
216 ssl_certificate www.nginx.org.crt;
217 ...
218 }
219 </programlisting>
220 </para>
221
222 </section>
223
224
225 <section name="certificate_with_several_names"
226 title="Birçok ad içeren SSL sertifikası">
227
228 <para>
229 Bir tekil IP&rsquo;yi birçok HTTPS sunucu arasında paylaştırmanın başka yolları da vardır, ancak bunların hepsi dezavantajlara sahiptir. Bunlardan biri, birçok ad içeren bir sertifikanın, SubjectAltName sertifika alanında kullanılmasıdır. Örneğin: <url>www.nginx.com</url> ve <url>www.nginx.org</url>. Ancak SubjectAltName alan uzunluğu sınırlandırılmıştır.
230 </para>
231
232 <para>
233 Diğer bir yol ise bir sertifikayı bir wildcard adı ile birlikte kullanmaktır. Örneğin: <url>*.nginx.org</url>. Bu sertifika <url>www.nginx.org</url> ile eşleşir ancak <url>nginx.org</url> ve <url>www.sub.nginx.org</url> ile eşleşmez. Bu iki method birlikte de kullanılabilir. Bir sertifika SubjectAltName alanı içerisinde gerçek ve wildcard adlarını içerebilir. Örneğin: <url>nginx.org</url> ve <url>*.nginx.org</url>.
234 </para>
235
236 <para>
237 Tüm sunuculardaki tekil hafıza kopyalarını devralması için, birçok ad içeren bir sertifika dosyası ve onun özel anahtar dosyasını, yapılandırmanın <i>http</i> düzeyinde bulundurmak en iyisidir:
238
239 <programlisting>
240 ssl_certificate common.crt;
241 ssl_certificate_key common.key;
242
243 server {
244 listen 443;
245 server_name www.nginx.com;
246 ssl on;
247 ...
248 }
249
250 server {
251 listen 443;
252 server_name www.nginx.org;
253 ssl on;
254 ...
255 }
256 </programlisting>
257 </para>
258
259 </section>
260
261
262 <section name="sni" title="Server Name Indication">
263
264 <para>
265 Bir IP adresi üzerinde birçok HTTPS sunucusu yürütebilmenin en genel yollarından biri, bir SSL el sıkışması (handshake) sırasında, tarayıcının talep edilmiş bir sunucu adını iletmesine izin veren ve böylece sunucunun varsayılan bağlantı için hangi sertifikayı kullanacağını bilmesini sağlayan <a href="http://en.wikipedia.org/wiki/Server_Name_Indication">TLSv1.1 Server Name Indication eklentisidir</a> (SNI, RFC3546). Ancak SNI, kısıtlı bir tarayıcı desteğine sahiptir. Mevcut destekleyen tarayıcılar ve versiyonları:
266 </para>
267
268 <list>
269
270 <item>
271 Opera 8.0;
272 </item>
273
274 <item>
275 MSIE 7.0 (sadece Windows Vista ve üstü);
276 </item>
277
278 <item>
279 Firefox 2.0 ve Mozilla Platform rv:1.8.1 platformunu kullanan diğer tarayıcılar;
280 </item>
281
282 <item>
283 Safari 3.2.1 (Windows Vista ve üstü);
284 </item>
285
286 <item>
287 Chrome (Windows Vista ve üstü).
288 </item>
289
290 </list>
291
292 <para>
293 nginx içerisinde SNI kullanabilmek için, hem nginx ile birlikte yüklenen OpenSSL kütüphanesi hem de yürütüm süresi (run time) üzerinde dinamik olarak bağlatılanmış diğer kütüphaneler tarafından desteklenmiş olmalıdır. Versiyon 0.9.8f itibari ile <nobr>&ldquo;--enable-tlsext&rdquo;</nobr> yapılandırma opsiyonu ile birlikte OpenSSL, SNI desteği sunmaktadır. OpenSSL 0.9.8j itibari ile varsayılan olarak etkindir. Eğer nginx, SNI desteği ile yüklenirse &ldquo;-V&rdquo; anahtarını girdiğinizde aşağıdaki çıktı ile karşılaşırsınız:
294
295 <programlisting>
296 $ nginx -V
297 ...
298 TLS SNI support enabled
299 ...
300 </programlisting>
301
302 Ama eğer SNI-etkin nginx, SNI desteği olmadan dinamik olarak OpenSSL&rsquo;e bağlantılanırsa, aşağıdaki hata ile karşılaşırsınız:
303
304 <programlisting>
305 nginx was built with SNI support, however, now it is linked
306 dynamically to an OpenSSL library which has no tlsext support,
307 therefore SNI is not available
308 </programlisting>
309 </para>
310
311 </section>
312
313
314 <section name="compatibility" title="Uygunluk">
315
316 <para>
317 <list>
318
319 <item>
320 Versiyon 0.8.21 ve 0.7.62 ile birlikte SNI destek statüsü &ldquo;-V&rdquo; anahtarı ile birlikte görüntülenmeye başlandı.
321 </item>
322
323 <item>
324 Versiyon 0.7.14 ile birlikte <dirname>listen</dirname> yönergesinin <dirname>ssl</dirname> parametresi desteklenmeye başlandı.
325 </item>
326
327 <item>
328 Versiyon 0.5.32 ile birlikte SNI desteği gelmiştir.
329 </item>
330
331 <item>
332 Versiyon 0.5.6 ile birlikte paylaşımlı SSL otorum önbelleği desteği gelmiştir.
333 </item>
334
335 </list>
336 </para>
337
338 <para>
339 <list>
340
341 <item>
342 Versiyon 0.7.65, 0.8.19 ve sonrası varsayılan SSL protokolleri: SSLv3 ve TLSv1.
343 </item>
344
345 <item>
346 Versiyon 0.7.64, 0.8.18 ve öncesi varsayılan SSL protokolleri: SSLv2, SSLv3 ve TLSv1.
347 </item>
348
349 </list>
350 </para>
351
352 <para>
353 <list>
354
355 <item>
356 Versiyon 0.7.65, 0.8.20 ve sonrası varsayılan SSL şifreleri (cipher):
357 <dirname>HIGH:!ADH:!MD5</dirname>.
358 </item>
359
360 <item>
361 Versiyon 0.8.19: varsayılan SSL şifreleri:
362 <dirname>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM</dirname>.
363 </item>
364
365 <item>
366 Versiyon 0.7.64, 0.8.18 ve öncesi varsayılan SSL şifreleri:<br/>
367 <dirname>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</dirname>.
368 </item>
369
370 </list>
371 </para>
372
373
374 </section>
375
376
377 </article>