پیکربندی امن پروتکل SSL/TLS بر روی وب‌سرور IIS

  ۱  مقدمه

پروتکل‌های SSL و TLS برای امن کردن ارتباط میان کاربر و سرور از طریق تصدیق هویت، رمزنگاری و صحت، طراحی و پیاده‌سازی شده است. جهت امن کردن داده‌ها این پروتکل‌ها از cipher suite هایی استفاده می‌کنند. هر cipher suite ترکیبی از الگوریتم‌های تصدیق اصالت‌، رمزنگاری و کد تصدیق هویت پیغام (MAC) است. در زمان پیکربندی TLS/SSL باید تنظیمات به‌درستی انجام‌شده و cipher suite های امن مورداستفاده قرار گیرد. برخی از مهم‌ترین این تنظیمات شامل غیرفعال کردن SSL 2.0 و SSL 3.0، غیرفعال کردن TLS 1.0 Compression و cipher suite های ناامن و استفاده از آخرین نسخه‌ی نرم‌افزارها است. پیکربندی ارائه‌شده بر روی سروری با مشخصات زیر انجام‌شده است.

نام نرم‌افزار نسخه‌ی مورداستفاده
سیستم‌عامل Windows 7 64 bit Ultimate
وب سرور IIS 7.‎5

ذکر این نکته لازم است که در ابتدا باید تمامی ماژول‌های وب سرور IIS (در Turn Windows feature On or Off) فعال گردد.

۲     ارزیابی وضعیت فعلی سرویس‌دهنده

برای ارزیابی وضعیت امنیتی SSL/TLS در سرویس‌دهنده خود از سرویس‌ زیر استفاده نمایید:

https://sslcheck.certcc.ir/‎

پس از انجام موارد امنیتی زیر مجدداً با استفاده از آدرس‌های فوق سرویس خود را پویش کنید تا از برطرف شدن مشکلات موجود مطمئن شوید.

۳     موارد پیشنهادی برای ارتقای امنیت

۱-۳     اضافه کردن زوج کلید معتبر به وب سرور

جهت امن‌سازی ارتباط از طریق SSL/TLS یکی از موارد، استفاده از زوج کلید خصوصی و عمومی معتبر است. جهت انجام این امر باید روند زیر دنبال گردد.

پس از دریافت زوج کلید از یک CA معتبر به همراه کلید عمومی CA باید با استفاده از دستور openssl زیر  هر سه را به یک کلید به فرمت pfx تبدیل کرد. (private.key نام فایل حاوی کلید خصوصی، Certificate.crt نام  فایل حاوی کلید عمومی و Intermediate_CA.crt فایل حاوی کلید عمومی CA است )

openssl pkcs12 -export -out certificate.pfx -inkey private.key -in Certificate.crt -certfile Intermediate_CA.crt

پس از واردکردن این دستور یک کلمه عبور از کاربر دریافت می‌شود.

سپس فایل خروجی (certificate.pfx) باید در وب سرور IIS  اضافه شود. مراحل زیر باید جهت انجام این امر صورت پذیرد:

  1. باید پس از باز کردن IIS Manager بر روی Server Certificate از پنجره‌ی Home کلیک کرد.

1

شکل ۱: نمایی از IIS Manager و انتخاب Server Certificate

  1. سپس از منوی Action باید گزینه import انتخاب شود.
  2. سپس باید مسیر فایل کلید تولیدشده در مرحله‌ی قبل را در بخش Certificate file وارد کرده و کلمه عبور واردشده نیز در بخش password وارد شود.

2

شکل ۲: نمایی از کلید اضافه‌شده به سرور

  1. در مرحله بعد باید از بخش sites بر روی نام سایت موردنظر کلیک کرده و سپس گزینه‌ی Binding از منوی Action را انتخاب کرد.
  2. سپس بر روی گزینه‌ی add از پنجره‌ی بازشده کلیک شود.
  3. در پنجره‌ی بازشده باید type به https تغییر یابد. سپس از منوی SSL Certificate نام certificate اضافه‌شده در مراحل قبل را انتخاب کرد.

3

شکل ۳: نمایی از اضافه کردن کلید به سرور

  1. درنهایت با کلیک بر روی OK زوج کلیدها بر روی سرور فعال می‌گردد.

4

شکل ۴: نمایی از نتیجه‌ی نهایی تنظیمات کلید

۲-۳     تنظیم الگوریتم‌های قدرتمند و Forward secrecy

یکی از مهم‌ترین بخش‌های مربوط به پیکربندی SSL/TLS غیرفعال کردن الگوریتم‌های آسیب‌پذیر و  CipherSiute‌ها به نحوی است که ضمن برآورده کردن امنیت، Forward secrecy نیز فعال گردد.

برای غیرفعال کردن تنظیم الگوریتم‌های ضعیف بر روی وب سرور IIS، باید با استفاده از تعریف registryKey جدید در مسیر زیر از RegisteryEditor استفاده کرد:

HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\

به‌عنوان نمونه برای غیرفعال کردن SSL 2.0 باید در ابتدا یک کلید بانام پروتکل (در اینجا SSL 2.0) در مسیر بالا ایجاد شود. سپس در هر یک از زیر کلید‌های مربوط به سرور یک DWORD جدید بانام ‘Enabled’ و مقدار ۰ تعریف شود. جهت حذف پروتکل‌های آسیب‌پذیر باید این فرآیند برای هر یک از موارد زیر انجام شود.

  1. غیرفعال کردن PCT 1.0
  2. غیرفعال کردن SSL 2.0
  3. غیرفعال کردن SSL 3.0

جهت فعال‌سازی پروتکل‌های قدرتمند بر روی سرور باید پروتکل‌های زیر فعال گردند.

  1. فعال کردن TLS 1.0
  2. فعال کردن TLS 1.1
  3. فعال کردن TLS 1.2

برای فعال کردن این پروتکل‌ها باید مشابه قبل بعد از ایجاد کلید و زیر کلید مقدار به  ‘Enabled’جای ۰ به ۰xffffffff مقداردهی شود. اما باید یک زیر کلید بانام ‘DisabledByDefault’ و مقدار ۰ نیز ایجاد گردد. جهت پیکربندی راحت‌تر می‌توان از دستورات powershell زیر استفاده کرد. این دستورات به‌راحتی تمامی این بخش‌ها را انجام خواهند داد.

# Copyright 2014, Alexander Hass

# http://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-an.‎.‎.‎

# Version 1.‎4

# – RC4 has been disabled.‎

# Version 1.‎3

# – MD5 has been disabled.‎

# Version 1.‎2

# – Re-factored code style and output

# Version 1.‎1

# – SSLv3 has been disabled.‎ ‪(Poodle attack protection)‬

Write-Host ‘Configuring IIS with SSL/TLS Deployment Best Practices…’

Write-Host ‘——————————————————————————–‘

# Disable Multi-Protocol Unified Hello

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Server’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\Multi-Protocol Unified Hello\Server’ -name Enabled -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

Write-Host ‘Multi-Protocol Unified Hello has been disabled.‎’

# Disable PCT 1.‎0

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.‎0\Server’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\PCT 1.‎0\Server’ -name Enabled -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

Write-Host ‘PCT 1.‎0 has been disabled.‎’

# Disable SSL 2.‎0 ‪(PCI Compliance)‬

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.‎0\Server’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.‎0\Server’ -name Enabled -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

Write-Host ‘SSL 2.‎0 has been disabled.‎’

# NOTE: If you disable SSL 3.‎0 the you may lock out some people still using

# Windows XP with IE6/7.‎ Without SSL 3.‎0 enabled, there is no protocol available

# for these people to fall back.‎ Safer shopping certifications may require that

# you disable SSLv3.‎

#

# Disable SSL 3.‎0 (PCI Compliance) and enable “Poodle” protection

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.‎0\Server’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.‎0\Server’ -name Enabled -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

Write-Host ‘SSL 3.‎0 has been disabled.‎’

# Add and Enable TLS 1.‎0 for client and server SCHANNEL communications

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎0\Server’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎0\Server’ -name ‘Enabled’ -value ‘۰xffffffff’ -PropertyType ‘DWord’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎0\Server’ -name ‘DisabledByDefault’ -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

Write-Host ‘TLS 1.‎0 has been enabled.‎’

# Add and Enable TLS 1.‎1 for client and server SCHANNEL communications

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎1\Server’ -Force | Out-Null

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎1\Client’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎1\Server’ -name ‘Enabled’ -value ‘۰xffffffff’ -PropertyType ‘DWord’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎1\Server’ -name ‘DisabledByDefault’ -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎1\Client’ -name ‘Enabled’ -value ۱ -PropertyType ‘DWord’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎1\Client’ -name ‘DisabledByDefault’ -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

Write-Host ‘TLS 1.‎1 has been enabled.‎’

# Add and Enable TLS 1.‎2 for client and server SCHANNEL communications

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎2\Server’ -Force | Out-Null

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎2\Client’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎2\Server’ -name ‘Enabled’ -value ‘۰xffffffff’ -PropertyType ‘DWord’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎2\Server’ -name ‘DisabledByDefault’ -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎2\Client’ -name ‘Enabled’ -value ۱ -PropertyType ‘DWord’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.‎2\Client’ -name ‘DisabledByDefault’ -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

Write-Host ‘TLS 1.‎2 has been enabled.‎’

همچنین جهت تنظیم cipher Suite‌های قدرتمند و Forward secrecy می‌توان از دستورات زیر استفاده کرد. این دستورات نیز بخش cipher مسیر زیر از RegisteryKey را تغییر می‌دهند.

# Re-create the ciphers key.‎

New-Item ‘HKLM:SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers’ -Force | Out-Null

# Disable insecure/weak ciphers.‎

$insecureCiphers = @(

‘DES 56/56’,

‘NULL’,

‘RC2 128/128’,

‘RC2 40/128’,

‘RC2 56/128’,

‘RC4 40/128’,

‘RC4 56/128’,

‘RC4 64/128’,

‘RC4 128/128’

)

Foreach ($insecureCipher in $insecureCiphers) {

$key = (Get-Item HKLM:\).OpenSubKey(‘SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers’, $true).CreateSubKey‪($insecureCipher)‬

$key.SetValue‪(‘Enabled’, 0, ‘DWord’)‬

$key.close()‎

Write-Host “Weak cipher $insecureCipher has been disabled.‎”

}

# Enable new secure ciphers.‎

# – RC4: It is recommended to disable RC4, but you may lock out WinXP/IE8 if you enforce this.‎ This is a requirement for FIPS 140-2.‎

# – ۳DES: It is recommended to disable these in near future.‎

$secureCiphers = @(

‘AES 128/128’,

‘AES 256/256’,

‘Triple DES 168/168’

)

Foreach ($secureCipher in $secureCiphers) {

$key = (Get-Item HKLM:\).OpenSubKey(‘SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers’, $true).CreateSubKey‪($secureCipher)‬

New-ItemProperty -path “HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\$secureCipher” -name ‘Enabled’ -value ‘۰xffffffff’ -PropertyType ‘DWord’ -Force | Out-Null

$key.close()‎

Write-Host “Strong cipher $secureCipher has been enabled.‎”

}

# Set hashes configuration.‎

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5’ -name Enabled -value ۰ -PropertyType ‘DWord’ -Force | Out-Null

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA’ -name Enabled -value ‘۰xffffffff’ -PropertyType ‘DWord’ -Force | Out-Null

# Set KeyExchangeAlgorithms configuration.‎

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman’ -name Enabled -value ‘۰xffffffff’ -PropertyType ‘DWord’ -Force | Out-Null

New-Item ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\PKCS’ -Force | Out-Null

New-ItemProperty -path ‘HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\PKCS’ -name Enabled -value ‘۰xffffffff’ -PropertyType ‘DWord’ -Force | Out-Null

# Set cipher suites order as secure as possible ‪(Enables Perfect Forward Secrecy)‬.‎

$cipherSuitesOrder = @(

‘TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521’,

‘TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384’,

‘TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256’,

‘TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521’,

‘TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384’,

‘TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256’,

‘TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521’,

‘TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521’,

‘TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384’,

‘TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256’,

‘TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384’,

‘TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256’,

‘TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521’,

‘TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256’,

‘TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521’,

‘TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384’,

‘TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521’,

‘TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384’,

‘TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384’,

‘TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256’,

‘TLS_DHE_DSS_WITH_AES_256_CBC_SHA256’,

‘TLS_DHE_DSS_WITH_AES_256_CBC_SHA’,

‘TLS_DHE_DSS_WITH_AES_128_CBC_SHA256’,

‘TLS_DHE_DSS_WITH_AES_128_CBC_SHA’,

‘TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA’,

‘TLS_RSA_WITH_AES_256_CBC_SHA256’,

‘TLS_RSA_WITH_AES_256_CBC_SHA’,

‘TLS_RSA_WITH_AES_128_CBC_SHA256’,

‘TLS_RSA_WITH_AES_128_CBC_SHA’

)

$cipherSuitesAsString = [string]::join‪(‘,’, $cipherSuitesOrder)‬

New-ItemProperty -path ‘HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002’ -name ‘Functions’ -value $cipherSuitesAsString -PropertyType ‘String’ -Force | Out-Null

Write-Host ‘——————————————————————————–‘

Write-Host ‘NOTE: After the system has been rebooted you can verify your server’

Write-Host ‘      configuration at https://www.ssllabs.com/ssltest/‎

Write-Host “——————————————————————————–`n

Write-Host -ForegroundColor Red ‘A computer restart is required to apply settings.‎ Restart computer now?‎’

Restart-Computer -Force -Confirm

این دستورات با قرار گرفتن در یک اسکریپت با فرمت ps1 بر روی سیستم‌عامل‌های ویندوز قابل اجرا هستند.

۳-۳     به‌روزرسانی نرم‌افزارها و نسخه‌ها

یکی از توصیه‌های مهم درزمینه‌ی پیکربندی امن SSL/TLS به روزبودن نسخه‌ی وب سرور و نصب آخرین وصله‌های امنیتی بر روی آن است.

۴-۳     فعال کردن OCSP Stapling

روشی برای بالا بردن سرعت در چک کردن لیست ابطال کلید برای گواهی است. با استفاده از OCSP Stapling  نیاز نیست که سرویس گیرنده درخواستی را به سرور OCSP بدهد و با استفاده از اطلاعات مهیا شده همراه گواهی، می‌تواند از باطل نبودن گواهی اطمینان حاصل کند.

در بسیاری از موارد، با اضافه کردن زوج کلید‌های تولیدشده توسط CA‌ها به سرور، این قابلیت به خودی خود فعال می‌گردد. اما برای فعال کردن آن در نسخه‌های بالای وب سرور IIS می‌توان مراحل زیر را انجام داد:

  1. باید پس از باز کردن IIS Manager بر روی نام وب سایتی که نیاز است که OCSP بر روی فعال گردد، کلیک کرد.
  2. سپس از منوی Action باید بر روی گزینه Binding کلیک کرد.
  3. پس از انتخاب ورودی که مربوط https است، باید بر روی گزینه‌ی edit کلیک کرد.
  4. درنهایت باید گزینه‌ی Require Server Name Indication غیرفعال گردد.

۵-۳     فعال کردن HSTS

HTTP Strict Transport Security یک بهبود امنیتی برای برنامه‌های تحت وبی است که از پروتکل HTTPS استفاده می‌کنند. وجود این مکانیسم باعث جلوگیری از  Downgrade Attack و  Cookie Hijacking می‌شود. این قابلیت همچنین مرورگر را ملزم می‌کند که حتماً از پروتکل HTTPS برای ارتباط با سرور استفاده کند. برای فعال‌سازی این قابلیت می‌توان به‌صورت زیر عمل کرد.

  1. باید در ابتدا بر روی ماژول HTTP Response Headers کلیک کرد.

 5

شکل ۵: انتخاب گزینه‌ی HTTP Response Headers

  1. سپس در منوی Action از منوی سمت راست پنچره‌ی بازشده باید گزینه Add را انتخاب کرد.
  2. سپس در بخش نام Strict-Transport-Security و در بخش value باید max-age=31536000; includeSubDomains قرار داده شود.

علاوه بر آن باید اجبار الزام کاربر به استفاده از HTTPS نیز انجام شود. جهت انجام این امر می‌تواند خطوط زیر را در فایل web.config سایت موردنظر قرار داد.

در ابتدا باید با استفاده از دستور زیر ماژول headers را فعال کرد:

یکی دیگر از راه‌های ممکن برای انجام این امر استفاده از UrlRewrite است که به صورت کامل در لینک زیر روش انجام آن، شرح داده شده است.

https://www.namecheap.com/support/knowledgebase/article.aspx/9595/0/http-to-https

۶-۳     فعال کردن HPKP

HTTP Public Key Pinning یک قابلیت است که به وب‌سایت‌هایی که از HTTPS استفاده می‌کنند اجازه می‌دهد تا نسبت به جعل هویت حمله‌کننده مقاوم باشند. بدین معنی که تنها CA‌های معتبر، مجاز به امضای گواهی وب‌سایت می‌باشند. در غیر این صورت هر CA قرار گرفته در لیست مرورگر قادر به امضای گواهی خواهد بود. بنابراین امکان جعل هویت را از حمله‌کننده می‌گیرد. برای فعال‌سازی این قابلیت می‌توان به‌صورت زیر عمل کرد.

  1. باید در ابتدا بر روی ماژول HTTP Response Headers کلیک کرد.

5

شکل ۵: انتخاب گزینه‌ی HTTP Response Headers

  1. سپس در منوی Action از منوی سمت راست پنچره‌ی بازشده باید گزینه Add را انتخاب کرد.
  2. سپس در بخش نام Public-Key-Pins و در بخش value باید مقدار زیر قرار داده شود.

pin-sha256=”SPKI_digest#1“; pin-sha256=”SPKI_digest#2“; max-age=31536000

هر کدام ازSPKI digest ‌های مربوط به یک CA را می‌توان از طریق کپی کردن محتوای کلید عمومی با فرمت PEM در فیلد قرار داده شده در سایت زیر، محاسبه کرد.

https://projects.dm.id.lv/s/pkp-online/calculator.html

۴     مراجع

[۱]. https://www.hass.de/content/setup-your-iis-ssl-perfect-forward-secrecy-and-tls-12

[۲]. https://www.namecheap.com/support/knowledgebase/article.aspx/9597/0/hpkp

[۳]. https://www.namecheap.com/support/knowledgebase/article.aspx/9595/0/http-to-https

[۴]. https://www.namecheap.com/support/knowledgebase/article.aspx/9596/0/hsts

[۵]. https://www.namecheap.com/support/knowledgebase/article.aspx/9602/0/ocsp

[۶].http://serverfault.com/questions/114795/iis7-how-to-import-public-key-and-private-key-as-two-seperate-files

[۷]. https://www.digicert.com/ssl-support/pfx-import-export-iis-7.htm

ترجمه:

مرکز پژوهشی آپا دانشگاه صنعتی امیرکبیر

http://apa.aut.ac.ir

دریافت نسخه PDF: