۱ مقدمه
پروتکلهای SSL و TLS جهت امن کردن ارتباط میان کاربر و سرور از طریق تصدیق هویت، رمزنگاری و صحت، طراحی و پیادهسازی شده است. جهت امن کردن دادهها این پروتکلها از cipher suite هایی استفاده میکنند. هر cipher suite ترکیبی از الگوریتمهای اصالتسنجی، رمزنگاری و کد تصدیق هویت پیغام (MAC) است. در زمان پیکربندی SSL/TLS باید تنظیمات بهدرستی انجام شده و cipher suite های امن مورد استفاده قرار گیرد.
علاوه بر آن، باید تنظیمات دیگری جهت امنسازی SSL انجام شود که برخی از مهمترین این تنظیمات شامل غیرفعال کردن SSL 2.0 و SSL 3.0، غیرفعال کردن TLS 1.0 Compression و cipher suite های نا امن است. پیکربندی ارائه شده بر روی سروری با مشخصات زیر انجام شده است.
نام نرمافزار |
نسخهی مورد استفاده |
سیستمعامل |
Linux |
وب سرور |
WebLogic 10.3.6 |
۲ ارزیابی وضعیت فعلی سرویس دهنده
برای ارزیابی وضعیت امنیتی SSL/TLS در سرویس دهنده خود از سرویس زیر استفاده نمایید:
پس از انجام موارد امنیتی زیر مجدداً با استفاده از آدرسهای فوق سرویس خود را پویش کنید تا از برطرف شدن مشکلات موجود مطمئن شوید.
۳ فعالسازی ارتباطات HTTPS
برای پیکربندی سرویسدهنده HTTPS و استفاده از این پروتکل ابتدا باید گواهینامه دیجیتال مربوطه را از مراکز صدور گواهی (CA[1])معتبر دریافت کرد (یا گواهی Self-sign را تولید کرد). گرفتن گواهی دارای مراحلی است که برای اطلاعات بیشتر در این زمینه میتوانید به گزارش ارائه شده توسط پژوهشکده آپای دانشگاه صنعتی امیرکبیر که در آدرس زیر قرار دارد مراجعه کنید:
مزایای گواهینامههای صادر شده از یک مرکز صدور گواهی مورد اعتماد این است که گواهینامه، توسط یک مرکز ریشه مورد اعتماد امضا شده و مورد اعتماد همه است. با این حال، در اختیار داشتن گواهینامههای صادر شده از یک مرکز صدور گواهی، نیازمند هزینه بیشتری است. بنابراین میتوان در شبکهی داخلی از یک گواهی Self-sign استفاده کرد. در غیر این صورت باید گواهی از یک مرکز ریشه معتبر دریافت شده و مورد استفاده قرار گیرد.
در این گزارش، در ابتدا چگونگی ایجاد و استفاده از گواهینامههای Self-sign در WebLogic شرح داده خواهد شد. سپس نحوهی امنسازی پروتکل SSL بر روی WebLogic آورده خواهد شد.
مرحله اول: کلیدهای identity میزبان و Keystore را تولید کنید.
در این بخش چگونگی استفاده از یک Keytool جهت تولید گواهینامههای قدرتمند و همچنین JCEKS keystore ها برای یک دامنه، شرح داده خواهد شد.
دستوری که در ادامه میآید هر دو گواهینامه دامنه و keystore را توسط keytool میسازد. گواهینامه یا کلید توسط SHA256 با تاریخ انقضای ۳ سال امضا میشود. برای تولید کلید از دستورhostname –f استفاده شده که تولید کلید و keystore را بر اساس نام سرور ایجاد میکند. بخشهایی که با رنگ قرمز مشخص شده را باید بر اساس مقادیر مناسب، مقداردهی کرد.
keytool -genkey -alias `hostname -f` -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 1095 -keypass mykeypass -storetype jceks -keystore `hostname -f`_identity.jck -storepass mystorepass -dname “CN=`hostname -f`, OU=MyOU,O=MyORG, L=MyCity, S=MyState, C=MyCountryCode“ |
---|
مرحله ۲: identity مربوط به گواهی root را استخراج کنید.
در این مرحله باید identity گواهینامه را از شناسه keystore استخراج کنیم. این شناسه گواهینامه در مرحله بعد در یک keystore مورد اعتماد وارد میشود. مقدار مربوط به پارامتر storepass، مقداری است که در دستور قبل به پارامتر داده شده است.
keytool -export -alias `hostname -f` -file `hostname -f`.cer -keystore `hostname -f`_identity.jck -storepass password |
---|
مرحله ۳: شناسه گواهینامه را درKeystore مورد اعتماد وارد کنید.
در این مرحله نیاز است تا یک keystore مورد اعتماد JCEKS ایجاد شود. Keystroe مورد اعتماد شامل زنجیرههای cert یا گواهینامههایی میشود که برای ایجاد اعتماد در طی SSL handshake استفاده شدهاند.
keytool -import -alias `hostname -f` -file `hostname -f`.cer -keystore `hostname -f`_trust.jck -storetype jceks -storepass mystorepass -noprompt |
---|
هنگامی که گواهینامهها وkeystore ها ساخته شدند، باید در یک فضای امن (یک دایرکتوری با دسترسی محدود) ذخیره گردند. باید owner مربوط Weblogic server دسترسی Read_Only به cert ها و keystoreها داشته باشد.
مرحله ۴: تنظیمات SSL را بررسی کنید.
در ابتدا باید SSL listener و پورت مربوط به آن را تنظیم کرد.
- در کنسول مدیریتی، به بخش تنظیمات سرور بروید:
Environment > Servers > Admin Server - گزینهSSL Listen Port Enabled را فعال کنید.
- به پورت وارد شده برای SSL توجه کنید.
- تغییرات را ذخیره کنید.
شکل ۱: فعال کردن SSL listener
مرحله ۵: تنظیم کردن Keystore های Weblogic
حالا که keystore ها و گواهینامههای که برای شناسایی و اعتماد تولید شدند، باید بر روی WebLogic تنظیم گردد تا از آنها استفاده کند.
- admin server را start کنید.
- به کنسول admin وارد شوید.
- مسیر Environment > Servers > Admin Server را پیدا کنید.
- بر روی تب Keystore کلیک کنید.
- بر روی دکمهchnage در بخش Keystore کلیک کرده و “Custom Identity and Custom Trust“ را انتخاب کنید.
- در زیرمجموعه Custom Identity Keysotre مسیر کامل شناسه keystore (که با نام `hostname –f`_identity.jck تولید شد) را مشخص کنید.
- نوعCustom Identity Keystore را در زیرمجموعه JCEKS مشخص کنید.
- کلمهی عبور (که در هنگام تولید کلید مورد استفاده قرار گرفت) را برای شناسه keystore در زیرمجموعه Custom Identity Keystore Passphrase مشخص کنید.
- همانگونه که شناسه keystore را تنظیم کردید، Custom Trust Keystore (که با نام `hostname –f`_trust.jck تولید شد) و نوع Custom Trust Keystore و عبارت عبور را نیز تنظیم کنید.
- تغییرات را ذخیره کنید.
شکل زیر، محیط مربوطه را نشان میدهد.
شکل ۲: تنظیم keystoreها
مرحله ۶: WebLogic SSL را تنظیم کنید.
بعد از پیکربندی مربوطه به keystore ، ما میتوانیم SSL را برای WebLogic تنظیم کنیم.
- بر روی تب SSL کلیک کنید.
- Private Key Alias را مشخص کنید. از نام مستعاری (قرار گرفته بعد از پارامتر -alias) استفاده کنید که هنگام ساخت کلید خصوصی و شناسه keystore، تعیین کردهاید.
- کلمهی عبور کلید خصوصی را مشخص کنید.
- بر روی Save کلیک کنید.
عکس زیر پیکربندیهای مربوطه را نشان میدهد.
شکل ۳: تنظیمات SSL
- سپس بر روی گزینه advance کلیک کنید.
- گزینه مربوط به Use JSSE SSL را فعال کنید (برای نسخههای ۱۰g و ۱۱g).
- در انتها گزینه save را بزنید.
مرحله ۷: فعال کردن debugging بر روی SSL (اختیاری)
بعد از فعال کردن SSL بر روی Weblogic ممکن است به دلایل مختلف مشکلاتی ایجاد شود، که فعال کردن debugging میتواند به شناسایی مشکلات کمک کند. جهت فعال کردن آن باید مراحل زیر را انجام داد:
- در ابتدا باید با استفاده از یک ویرایشگر اسکریپت sh قرار گرفته در مسیر $DOMAIN_HOME/bin/ باز شود.
- سپس خط زیر باید برای پارامتر JAVA_OPTIONS اضافه گردد.
-Dssl.debug=true -Dweblogic.StdoutDebugEnabled=true |
---|
شکل ۴: نحوه فعال سازی debugging
۴ موارد پیشنهادی برای ارتقای امنیت
در این بخش چگونگی پیکربندی امن SSL/TLS را در سرویسدهنده وب Weblogic بیان میکنیم. مواردی همچون استثنا کردن برخی الگوریتمهای رمز به منظور کاهش حملاتی شبیه به FREAK، CRIME و LogJAM، غیرفعالسازی نسخههای ناامن SSL، برقرار کردن رمزنگاریهای قوی که از (FS) Forward Secrecy پشتیبانی میکنند را بیان میکنیم.
نکته: ذکر این نکته لازم است که بسیاری از تنظیمات مانند cipher order و HPKP و … توسط WebLogic پشتیبانی نمیشود.
۴٫۱ تنظیم الگوریتمهای قدرتمند و Forward secrecy
SSLv2 و SSLv3 (به خاطر حمله POODLE) ناامن هستند و باید غیرفعال شوند. برای غیرفعالسازی SSL، خط زیر را در فایل setDomainEnv.sh، قرار گرفته در مسیر $DOMAIN_HOME/bin/ اضافه کنید. پارامتر JAVA_OPTIONS را پیدا کرده و خط زیر را به آن اضافه کنید.
-Dweblogic.security.SSL.protocolVersion=TLSv1 |
---|
خط بالا به Weblogic میگوید که SSL را غیرفعال کرده و فقط از TLS 1.0، TLS 1.1 یا TLS 1.2 استفاده کند. شما همچنین میتوانید با اضافه کردن دستور زیر به خط JAVA_OPTIONS، حداقل نسخه قابل پشتیبانی را مشخص کنید:
weblogic.security.SSL.minimumProtocolVersion=[protocol] |
---|
که [protocal] میتواند شامل موارد زیر باشد:
- TLSv1
- TLSv1.1
- TLSv1.2
همچنین با اضافه کردن پارامترهای زیر به JAVA_OPTIONS، نیز میتوان امکان استفاده از cipherهای ضعیف را غیرفعال کرد.
-Dweblogic.security.SSL.allowUnencryptedNullCipher=false
-Dweblogic.security.disableNullCipher=true |
---|
علاوه بر موارد ذکر شده، باید Forward Secrecy نیز فعال شود. Forward Secrecy اطمینان میدهد که صحت[۲] یک کلید جلسه[۳] حتی وقتی که کلیدهای زیادی مورد مخاطره قرار گرفتند، حفظ میشود. FS کامل[۴] این مورد را با استخراج یک کلید جدید برای هر جلسه، به انجام میرساند. این بدان معناست که زمانی که کلید خصوصی به مخاطره افتاد، نمیتواند برای رمزگشایی ترافیک SSL مورد استفاده قرار گیرد. جهت تنظیم cipher Suiteهای قدرتمند و Forward secrecy میتوان از دستورات زیر استفاده کرد. خطهای زیر را در $DOMAIN_HOME/config/config.xml وارد کنید. برای پشتیبانی ازAES 256، نیاز دارید تا بسته JCE را برای JDK نصب کنید.
<server>
<name>AdminServer</name> <ssl> <enabled>true</enabled> <ciphersuite>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA</ciphersuite><ciphersuite>TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA256</ciphersuite><ciphersuite>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA</ciphersuite><ciphersuite>TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256</ciphersuite><ciphersuite>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA</ciphersuite><ciphersuite>TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA256</ciphersuite><ciphersuite>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA</ciphersuite><ciphersuite>TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256</ciphersuite><ciphersuite>TLS_DHE_DSS_WITH_AES_256_CBC_SHA</ciphersuite><ciphersuite>TLS_DHE_DSS_WITH_AES_256_CBC_SHA256</ciphersuite><ciphersuite>TLS_DHE_DSS_WITH_AES_128_CBC_SHA</ciphersuite><ciphersuite>TLS_DHE_DSS_WITH_AES_128_CBC_SHA256</ciphersuite><ciphersuite>TLS_RSA_WITH_AES_256_CBC_SHA</ciphersuite><ciphersuite>TLS_RSA_WITH_AES_256_CBC_SHA256</ciphersuite><ciphersuite>TLS_RSA_WITH_AES_128_CBC_SHA</ciphersuite><ciphersuite>TLS_RSA_WITH_AES_128_CBC_SHA256</ciphersuite><ciphersuite>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384</ciphersuite><ciphersuite>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384</ciphersuite><ciphersuite>TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA</ciphersuite><ciphersuite>TLS_ECDH_RSA_WITH_AES_256_CBC_SHA</ciphersuite><ciphersuite>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA</ciphersuite><ciphersuite>TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256</ciphersuite> <ciphersuite>TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256</ciphersuite> <hostname-verifier xsi:nil=”true”></hostname-verifier> |
---|
بعد از پیکربندی با استفاده از اسکریپت دردسترس در آدرس زیر، میتوان بررسی کرد که چه مرورگرهایی امکان ارتباط با سرور را خواهند داشت.
۴٫۲ بهروزرسانی نرمافزارها و نسخهها
یکی از توصیههای مهم درزمینهی پیکربندی امن SSL/TLS به روزبودن نسخهی وب سرور و نصب آخرین وصلههای امنیتی بر روی آن است.
۴٫۳ فعال کردن OCSP Stapling
OCSP Stapling روشی برای بالا بردن سرعت در چک کردن لیست ابطال کلید برای گواهی است. با استفاده از OCSP Stapling نیاز نیست که سرویس گیرنده درخواستی را به سرور OCSP بدهد و با استفاده از اطلاعات مهیا شده همراه گواهی، میتواند از باطل نبودن گواهی اطمینان حاصل کند.
برای فعال کردن آن بر روی وب سرور میتوان مراحل زیر را انجام داد:
- در سمت چپ پنل مدیریتی بر در بخش Domain Structure بر روی نام دامنه کلیک کنید.
- سپس از مسیر Security > SSL Certificate Revocation Checking > General وارد شده و گزینهی Enable Certificate Revocation Checking را فعال کنید.
- در بخش Revocation Checks نیز میتواند روش certificate revocation checking را انتخاب کنید.
- سپس بر روی گزینهی save کلیک کنید.
شکل ۶: تنظیم OCSP
۴٫۴ فعال کردن HSTS
HTTP Strict Transport Security یک بهبود امنیتی برای برنامههای تحت وبی است که از پروتکل HTTPS استفاده میکنند. وجود این مکانیسم باعث جلوگیری از Downgrade Attack وCookie Hijacking میشود. این قابلیت همچنین مرورگر را ملزم میکند که حتماً از پروتکل HTTPS برای ارتباط با سرور استفاده کند.
پیکربندی مشخصی برای فعالسازی HSTS در weblogic وجود ندارد (مانند فعال کردن یک گزینه در کنسول مدیریتی) و برای این کار نیاز است که یک فیلتر ایجاد و به web application مورد نظر اضافه گردد. در ابتدا باید خطوط زیر به فایل web.xml قرار گرفته در مسیر $MW_HOME/ wlserver/server/lib/consoleapp/webapp/WEB-INF/web.xml (البته مسیر ممکن است در برخی از موارد به علت انتخاب نام متفاوت تفاوت جزئی داشته باشد) اضافه گردد:
<filter>
<filter-name>HSTSFilter</filter-name> </filter> |
---|
برای ایجاد فیلتر بالا (security.HSTSFilter) باید به صورت زیر عمل کرده و سپس آن را به web application اضافه کرد:
package security;
import java.io.IOException; import javax.servlet.Filter; public class HSTSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, if (req.isSecure()) chain.doFilter(req, resp); } |
---|
همچنین برای هدایت خودکار ارتباطات HTTP به HTTP میتوانید مقدار ‘transport-guarantee’ را به صورت CONFIDENTIAL یا INTEGRAL در web.xml قرار دهید که weblogic، کلاینتهایی که از HTTP استفاده میکنند را به صورت خودکار به سمت HTTPS مسیردهی میکند. خطوط زیر باید در فایل web.xml درون تگ security-constraint قرار داده شود.
<user-data-constraint> <description> This is how the user data must be transmitted. </description> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> |
---|
۴ مراجع
[۱] https://docs.oracle.com/middleware/1221/wls/LOCKD/practices.htm#LOCKD124
[۲] https://docs.oracle.com/cd/E13222_01/wls/docs81/webserv/security.html
[۳] http://www.oracle.com/technetwork/articles/soa/patil-certrevoc-1873528.html
[۴] https://docs.oracle.com/cd/E24329_01/web.1211/e24422/ssl.htm#SECMG384
[۶] https://serverfault.com/questions/693876/how-can-the-hsts-header-be-added-to-weblogic
[۷] http://docs.oracle.com/javase/6/docs/technotes/guides/security/SunProviders.html#SunJSSEProvider
[۹] http://remotepsadmins.com/2015/01/24/ssl-weblogic/
[۱] Certificate Authority
[۲] Integrity
[۳] Session Key
[۴] Perfect Forward Secrecy
ثبت ديدگاه