برای تأمین محرمانگی و جامعیت داده‌های مبادله شده می‌توان از پروتکل‌های استانداردی که بدین منظور طراحی‌ شده استفاده کرد. در حال حاضر مهم‌ترین پروتکل رمزنگاری که در سطح اینترنت برای رمزنگاری داده‌های لایه کاربرد و تأمین امنیت ارتباطات استفاده می‌شود، پروتکل SSL/TLS است. در این گزارش مراحل نصب گواهی‌نامه SSL و امن‌سازی پروتکل SSL/TLS بر روی سرویس‌دهنده وب Glassfish نسخه ۴٫۱ بیان شده است.

۱    فعال‌سازی ارتباطات HTTPS

برای پیکربندی سرویس‌دهنده HTTPS و استفاده از این پروتکل ابتدا باید گواهی‌نامه دیجیتال مربوطه را از مراکز صدور گواهی (۱)(CA) معتبر دریافت کرد (یا گواهی خود-امضا را تولید کرد). گرفتن گواهی دارای مراحلی است که برای اطلاعات بیشتر در این زمینه می‌توانید به گزارش ارائه شده توسط پژوهشکده آپای دانشگاه صنعتی امیرکبیر که در آدرس زیر قرار دارد مراجعه کنید:

http://apa.aut.ac.ir/?p=971

قبل از انجام هرکاری، از فایل‌های این زیرشاخه نسخه پشتیبان تهیه کنید:

$GFHOME/domains/yourdomain/config

مراحل قرار دادن گواهی‌نامه دیجیتال در GlassFish به صورت زیر است:

  1. یک کلید خصوصی تولید کنید.
  2. یک درخواست امضای گواهی‌نامه (۲)(CSR) بسازید.
  3. CSR را به مرکز صدور گواهی ارسال کنید.
  4. گواهی‌نامه امضا شده خود را وارد کنید.
  5. تنظیمات ضروری Glassfish را انجام دهید.

در ابتدا، اجازه دهید کلید خصوصی خود را بسازیم. شما می‌توانید بر روی keystore موجود در Glassfish کار کنید یا می‌توانید یک keystore جدید بسازید و سپس آن را در keystore مربوط به Glassfish وارد کنید. برای امنیت بیشتر، ما یک keystore جدید ساختیم و کلید خصوصی را توسط آن تولید کردیم:

cd ~
mkdir ssl-stuff
cd ssl-stuff
keytool -keysize 2048 -genkey -alias yourdomain.com -keyalg RSA -dname “CN=www.yourdomain.com,O=Your Organization,L=Your City,S=Your State,C=Your Country Code like US, CH or TR” -keystore keystore.jks -keypass changeit -storepass changeit

حالا کلید خصوصی در فایل keystore.jks تولید شده است. در دستور زیر، ما از ‘changeit’ به عنوان کلمه‌عبور کلید و کلمه‌عبور keystore استفاده می‌کنیم.

keytool -certreq -alias yourdomain.com -keystore keystore.jks -storepass changeit -keypass changeit -file server.csr

این نتایج در یک درخواست امضا شدن گواهی‌نامه قرار دارند (server.csr). در حال حاضر ما دو فایل در اختیار داریم:

keystore.jks

server.csr

مرحله بعد فرستادن فایل server.csr به یکی از مراکز صدور گواهی و دریافت گواهی نامه امضا شده است. مراکز صدور گواهی به دنبال نتایج whois دامنه شما هستند و اگر آن‌ها آدرس پست الکترونیک نماینده فنی را پیدا کنند، گواهی نامه امضا شده را به این آدرس پست الکترونیک ارسال می‌کنند. اگر آدرس پست الکترونیکی وجود نداشته باشد، آن‌ها یک کد در اختیار شما قرار می‌دهند (مانند abcd123) و از شما می‌خواهند که یا یک زیردامنه با آن کد اضافه کنید و یا اینکه یک صفحه html با نام این کد ایجاد کنید (و همچنین با محتوای پر شده توسط کد).

از مرکز صدور گواهی، معمولا شما باید دو فایل دریافت کنید:

  • گواهی نامه امضا شده خود را که معمولا اینگونه نام‌گذاری می‌شود: com.crt
  • ریشه گواهی‌نامه (شما ممکن است بیش از یک فایل دریافت کنید. در بعضی موارد مراکز صدور گواهی، گواهی‌نامه‌های میانی را ارسال می‌کنند.)

مرحله بعد، وارد کردن keystore مورد استفاده در kestore مربوط به Glassfish است:

keytool -importkeystore -srckeystore ~/ssl-stuff/keystore.jks -destkeystore $GLASSFISHHOME/domains/yourdomain/config/keystore.jks

هم اکنون، مرحله نهایی که باید بر روی keystore انجام شود، وارد کردن گواهی‌نامه امضا شده است. در ابتدا ما باید ریشه گواهی نامه را در keystore مربوط به Glassfish وارد کنیم.

cd $GLASSFISH_HOME/domains/yourdomain/config keytool -import -v -trustcacerts -alias root -file gd_bundle.crt -keystore keystore.jks -keypass changeit -storepass changeit

سپس گواهی نامه امضا شده خود را وارد کنید:

keytool -import -v -trustcacerts -alias yourdomain.com -file yourdomain.com.crt -keystore keystore.jks -keypass changeit -storepass changeit

حال بخش مربوط به keystore تمام شده است. شما باید چیزی شبیه این داشته باشید:

keytool -list -keystore keystore.jks

Keystore-Typ: JKS
Keystore-Provider: SUN

….

root, 03.06.2011, trustedCertEntry,
Zertifikatsfingerabdruck (MD5): XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
yourdomain.com, 03.06.2011, PrivateKeyEntry,
Zertifikatsfingerabdruck (MD5): XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

مرحله نهایی این فرآیند، استفاده از دامنه alias به عنوان نام مستعار گواهی‌نامه بر روی Glassfish است.

glassfish1

۱    پیکربندی امن پروتکل SSL/TLS

در این بخش چگونگی پیکربندی امن پروتکل SSL/TLS را در سرویس‌دهنده وب GlassFish بیان می‌کنیم. مواردی همچون استثنا کردن برخی الگوریتم‌های رمز به منظور کاهش حملاتی شبیه به FREAK ،CRIME و LogJAM، غیرفعال ‌سازی نسخه‌های ناامن SSL و برقرار کردن رمزنگاری‌های قوی که از (FS) Forward Secrecy پشتیبانی می‌کنند را بیان می‌کنیم.

برای بررسی وضعیت امنیتی پروتکل SSL/TLS سرویس‌دهنده خود، می‌توانید به ابزاری که بدین منظور توسط پژوهشکده آپای دانشگاه صنعتی امیرکبیر طراحی شده و در آدرس زیر قرار دارد، مراجعه کنید.

https://sslcheck.certcc.ir

۱-۲    غیرفعال سازی SSLv2 و SSLv3

SSLv2 و SSLv3 (به خاطر حمله POODLE) ناامن هستند و باید غیرفعال شوند. در ادامه دو روش را برای غیر فعال کردن نسخه‌های ناامن SSL را بیان می‌کنیم.

۱-۱-۲    روش اول: کنسول مدیریتی

برای هر کدام از تنظیمات شما:

  • وارد منوی Protocols شوید، که می‌توانید آن را در زیرمجموعه Network Config پیدا کنید.
  • برای هر کدام از شنودهایی که لیست شده است، بر روی نام شنودکننده کلیک کنید:
    • بررسی کنید که گزینه Security تیک خورده باشد، شما نمی‌توانید SSL3 را از طریق کنسول مدیریتی غیرفعال کنید مگر اینکه Security فعال شده باشد.
    • با فرض اینکه گزینه Security تیک خورده باشد، به تب SSL بروید و تیک مربوط به گزینه SSL3 را بردارید.
    • بر روی Save کلیک کنید و به شنود کننده بعدی بروید.

هنگامی که شما SSL3 را برای هر کدام از شنودکننده‌ها غیرفعال کرده باشید، شما باید دامنه خود را راه اندازی مجدد کنید تا تغییرات حاصل شود. قبل از اینکار، شما همچنین باید SSL3 را بر روی شنودکننده‌های IIOP نیز غیرفعال کنید، بنابراین بر هرکدام از تنظیمات خود باید مراحل زیر را انجام دهید:

  • به بخش شنودکننده‌های IIOP خود بروید، که در بخش ORB قرار دارد.
  • برای هر کدام از شنودکننده‌ها، بر روی نام شنودکننده کلیک کنید، سپس:
    • بررسی کنید که گزینه Security تیک خورده باشد، شما نمی‌توانید SSL3 را از طریق کنسول مدیریتی غیرفعال کنید مگر اینکه Security فعال شده باشد.
    • با فرض اینکه گزینه Security تیک خورده باشد، به تب SSL بروید و تیک مربوط به گزینه SSL3 را بردارید.
    • بر روی Save کلیک کنید و به شنودکننده بعدی بروید.
  • دامنه را راه‌اندازی مجدد کنید.

این روش احتمالا راحت‌ترین راه برای غیرفعال کردن SSL3 است، مخصوصا اگر شما در حال تنظیم و نصب یک GlassfFish جدید باشید. در هنگام نصب یک GlassFish جدید، شما فقط دو مورد از تنظیمات را ویرایش کنید و هر مورد جدید ساخته شده می‌تواند تنظیمات خود را از آن‌جا کپی کند.

۲-۱-۲    روش دوم: ویرایش domain.xml

غیرفعال کردن SSL3 از طریق فایل تنظیمات دامنه کمی پیچیده‌تر است، اما اگر شما بدانید دقیقا در حال چه کاری هستید، می‌توان آن‌ ‌را نسبت به روش کنسول مدیریتی سریع‌تر انجام داد، مخصوصا اگر شما ارتباطات HTTPS یا گروه‌های تنظیمات زیادی داشته باشید.

فایلی که شما به دنبال آن هستید، فایل domain.xml است، که می‌توانید آن را در زیرمجموعه $GF_INSTALL/glassfish/domains/$DOMAIN/config پیدا کنید که $GF_INSTALL دایرکتوری است که GlassFish را بر روی آن نصب کردید و $DOMAIN نام دامنه شما است (نام پیش فرض آن، domain1 است). اگرچه قبل از شروع به ویرایش فایل، بهتر است که دامنه خود را متوقف کنید، چراکه هنگامی که دامنه همچنان فعال است، امکان دارد تغییراتی بر روی فایل domain.xml اعمال کند که وقتی شما خودتان در حال اعمال تغییرات مورد نظر هستید، ممکن است مورد تأیید شما نباشد.

نام پیش فرض شنودکننده HTTP، http-listener-2 است. در تگ‌های این پروتکل، چیزی که شما می‌بینید احتمالا شبیه این است:

<protocol name=”http-listener-2″ security-enabled=”true”>
<http max-connections=”250″ default-virtual-server=”server”>
<file-cache></file-cache>
</http>
<ssl classname=”com.sun.enterprise.security.ssl.GlassfishSSLImpl” cert-nickname=”s1as”></ssl
</protocol>

برای غیرفعال کردن SSL3، ssl3-enabled=false را بین تگ‌های <ssl> اضافه کنید، که به این صورت در می‌آید:

<protocol name=”http-listener-2″ security-enabled=”true”>
<http max-connections=”250″ default-virtual-server=”server”>
<file-cache></file-cache>
</http>
<ssl ssl3-enabled=false classname=”com.sun.enterprise.security.ssl.GlassfishSSLImpl” cert-nickname=”s1as”></ssl>
</protocol>

روش غیرفعال کردن SSL3 مشابه روش غیرفعال کردن شنود‌کننده‌های HTTP است، در نتیجه، این تغییرات را اعمال کنید.

فایل اصلی شما احتمالا چیزی شبیه به این است:

<iiop-listener address=”0.0.0.0″ port=”3820″ id=”SSL” security-enabled=”true”>
<ssl classname=”com.sun.enterprise.security.ssl.GlassfishSSLImpl” cert-nickname=”s1as”></ssl>
</iiop-listener>
<iiop-listener address=”0.0.0.0″ port=”3920″ id=”SSL_MUTUALAUTH” security-enabled=”true”>
<ssl classname=”com.sun.enterprise.security.ssl.GlassfishSSLImpl” cert-nickname=”s1as” client-auth-enabled=”true”></ssl>
</iiop-listener>

که باید به صورت زیر تغییر یابد:

<iiop-listener address=”0.0.0.0″ port=”3820″ id=”SSL” security-enabled=”true”>
<ssl ssl3-enabled=”false” classname=”com.sun.enterprise.security.ssl.GlassfishSSLImpl” cert-nickname=”s1as”></ssl>
</iiop-listener>
<iiop-listener address=”0.0.0.0″ port=”3920″ id=”SSL_MUTUALAUTH” security-enabled=”true”>
<ssl ssl3-enabled=”false” classname=”com.sun.enterprise.security.ssl.GlassfishSSLImpl” cert-nickname=”s1as” client-auth-enabled=”true”></ssl>
</iiop-listener>

و شما SSL3 را از هر دو شنود کننده غیرفعال کرده‌اید.

مطمئن شوید که SSL3 را هم بر روی اتصالات و هم بر روی هر دو گروه تنظیمات، غیرفعال کرده باشید، شما باید توجه داشته باشید که شنودکننده‌ها یک بار در default-config و بار دیگر در server-config تنظیم شده‌اند.

۲-۲ غیرفعال سازی الگوریتم‌های رمزنگاری ضعیف

Forward Secrecy اطمینان می‌دهد که صحت(۳) یک کلید جلسه(۴) حتی وقتی که کلیدهای زیادی مورد مخاطره قرار گرفتند، حفظ می‌شود. FS کامل(۵) این مورد را با استخراج یک کلید جدید برای هر جلسه، به انجام می‌رساند. این بدان معناست که زمانی که کلید خصوصی به مخاطره افتاد، نمی‌تواند برای رمزگشایی ترافیک SSL مورد استفاده قرار گیرد.

برای غیرفعال کردن الگوریتم‌های رمزنگاری ضعیف باید در فایل پیکربندی domain.xml، تغییراتی اعمال کنیم و نام این الگوریتم‌ها را حذف کنیم. برای غیرفعال کردن الگوریتم‌های رمزنگاری ضعیف، باید دو پارامتر زیر را به درستی مقدار دهی کنیم.

۱) ssl2ciphers:

این پارامتر شامل لیستی از الگوریتم‌های رمزنگاری SSL2 است که از طریق کاما (,) از هم جداشده‌اند. الگوریتم‌هایی که به صورت صریح در این لیست نیایند، بدان معنی است که غیرفعال هستند. اگر از این پارامتر در فایل پیکربندی استفاده نشود، بدان معنی است که همه الگوریتم‌های رمزنگاری (که پشتیبانی می‌شوند) فعال هستند. مقادیر مجاز برای این پارامتر شامل موارد زیر هستند:

  • rc4
  • rc4export
  • rc2
  • rc2export
  • idea
  • des
  • desede3

۲) ssl3tlsciphers

این پارامتر شامل لیستی از الگوریتم‌های رمزنگاری SSL3 و/یا TLS است که از طریق کاما (,) از هم جداشده‌اند. الگوریتم‌هایی که به صورت صریح در این لیست نیایند، بدان معنی است که غیرفعال هستند. اگر از این پارامتر در فایل پیکربندی استفاده نشود، بدان معنی است که همه الگوریتم‌های رمزنگاری (که پشتیبانی می‌شوند) فعال هستند. مقادیر مجاز برای این پارامتر شامل موارد زیر هستند:

  • SSL_RSA_WITH_RC4_128_MD5
  • SSL_RSA_WITH_3DES_EDE_CBC_SHA
  • SSL_RSA_WITH_DES_CBC_SHA
  • SSL_RSA_EXPORT_WITH_RC4_40_MD5
  • SSL_RSA_WITH_NULL_MD5
  • SSL_RSA_WITH_RC4_128_SHA
  • SSL_RSA_WITH_NULL_SHA

باید دقت کنید که الگوریتم‌های ضعیف مانند RC4 را از لیست بالا حذف کرده و همیشه این پیکربندی را با جدیدترین توصیه‌های امنیتی به‌روز رسانی کنید. به عنوان مثال رمزنگاری‌های زیر، Forward Security را پشتیبانی نمی‌کنند و باید غیرفعال شوند:

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA

 

۳ منابع

[۱] http://docs.oracle.com/cd/E18930_01/html/821-2432/gkyba.html

[۲] http://docs.oracle.com/cd/E18930_01/html/821-2433/create-ssl-1.html#SJSASEEREFMANcreate-ssl-1

[۳] https://docs.oracle.com/cd/E19798-01/821-1794/aeogl/index.html

[۴] http://www.aliok.com.tr/techposts/2011-06-04-using-your-ssl-certificate-on-glassfish-3.html

[۵] http://blog.c2b2.co.uk/2014/11/disabling-sslv3-in-glassfish-41.html


(۱) Certificate Authority
(۲) Certificate signing request
(۳) Integrity
(۴) Session Key
(۵) Perfect Forward Secrecy


دریافت نسخه PDF