روزنوشت

می نویسم؛ تا به یاد آورم روزی، بودم

روزنوشت

می نویسم؛ تا به یاد آورم روزی، بودم

روزنوشت

من آرزویی ندارم، من از چیزی نمی‌ترسم، من آزادم...

«کازانتزاکیس»

دنبال کنندگان ۳ نفر
این وبلاگ را دنبال کنید
آخرین نظرات

سلام

 

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

 

برای اینکار باید گواهینامه‌ی SSL (یا SSL Certificate) رو از سایت های معتبری که این خدمات رو ارائه میدن تهیه کنید، که بدون هزینه هم نخواهد بود.

در این بین سایت هایی هستند که این خدمات رو بصورت رایگان ارائه میدن، یکی از این سایت ها StartSSL هست که این مجوز رو بصورت رایگان به شما میده (گمان میکنم برای سال اول رایگان هست)

البته توجه داشته باشید که دامنه ی ir رو پشتیبانی نمیکنن و برای این دامین SSL رایگان ارائه نمیدن.

 

در این پست قصد دارم مراحل تهیه ی SSL و فعال سازی برای اون دامین رو روی یک سرور لینوکسی و تحت وب سرور Nginx اموزش بدم.

در این آموزش قصد داریم تنها برای یک دامین (دامین اصلی، و نه دامین و همه ی زیر دامنه ها) مجوز SSL دریافت کنیم و وب سرور NginX رو تنظیم کنیم تا برای این دامین خاص SSL رو فعال کنه.

دامین رو example.com در نظر میگیریم. سرور هم یک سرور لینوکسی خواهد بود (در این مثال Ubuntu اما تفاوتی در توزیع های مختلف وجود نداره)

 

عملیاتی که قراره انجام بدیم (سرفصل ها):

نکته: دستوراتی که اجرا می کنیم نیاز به دسترسی root دارن، فرض ما بر این هست که با یوزر روت وارد شدید، اگر غیر این هست قبل از دستورات sudo رو اضافه کنید.

نکته: در این آموزش از دامین فرضی www.example.com استفاده شده، در تمام مراحل دامین خودتون رو جایگزین این دامین کنید

تولید کلید خصوصی بر روی سرور

با SSH به سرور لاگین کنید، می تونید کلید رو در هر مکان امنی در سرور نگهداری کنید، برای این آموزش مسیر /etc/cert/ رو انتخاب کردم.

وارد این مسیر میشیم:

cd /etc/cert/

 برای تولید کلید از ابزار openssl استفاده می کنیم.

توجه کنید که بهتره که نام دامین رو همراه با www ابتدا وارد کنید (چه در این کد و چه در سایت StartSSL)، با اینکار مجوزی که تولید میشه هم با www و هم بدون www ابتدا معتبر هست

 

openssl req -newkey rsa:2048 -nodes -keyout www.example.com.key -out www.example.com.csr

 در این مرحله، اطلاعاتی ازتون گرفته میشه که در مجوز لحاظ میشه

بعنوان مثال:

 

Country Name (2 letter code) [AU]:IR
State or Province Name (full name) [Some-State]:Tehran
Locality Name (eg, city) []:Tehran
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:you@gmail.com

 مهمترین بخشی که باید بهش توجه کنید، Common Name هست که باید همون آدرسی باشه که می خواید براش مجوز دریافت کنید.

پسوردی که تو این مرحله ازتون خواسته میشه رو به یاد داشته باشید، در مراحل بعد بهش نیاز داریم

 

بعد از اینکه اطلاعات لازم رو وارد کردید، دو فایل .key و .csr تولید میشه.

فایل .key همون کلید خصوصی هست که باید ازش حفاظت بشه.

فایل .csr حاوی اطلاعاتی هست که در مرحله ی تولید مجوز در سایت (شرکتی که ازش مجوز مییرید) وارد می کنیم و بر اساس این اطلاعات مجوز برامون ساخته میشه.

 

Verify کردن دامین در سایت StartSSL

تو سایت StartSSL ثبت نام و لاگین کنید. یادتون باشه که تو این سایت پسوردی برای اکانت تعریف نمی کنید، هربار که قصد وارد شدن دارید ایمیلتون رو وارد می کنید و یه ایمیل حاوی یه کلید یکبارمصرف براتون فرستاده میشه که با اون لاگین می کنید.

 

 

وقتی لاگین کردین، وارد بخش Validation Wizard بشید:

 

 

گزینه ی Domain Validation رو انتخاب کنید و Continue رو بزنید

 

 

دامین رو وارد کنید

 

 

تو این صفحه، دامین رو چک می کنه و تعدادی ایمیل رو میاره، اگه تو تنظیمات دامین هنگام ثبت ایمیلی رو وارد کرده باشید، اون رو هم تو لیست میاره.

هدف اینه که یکی از ایمیل ها رو انتخاب کنید (ایمیلی که بهش دسترسی دارید)، StartSSL یک ایمیل حاوی کد رو برای اون ایمیل می فرسته و پس از دریافت تو کادر پایین واردش می کنید.

اینجوری تایید می کنه که صاحب دامین هستین

 

اگه همه چی خوب پیش بره، با همچین صفحه ای روبرو میشین (مسلماً چون من به دامین example.com دسترسی ندارم، از یه دامین دیگه واسه این مرحله استفاده کردم تا تایید بشه)

 

 

این یعنی دامین شما تایید شده و میتونید براش مجوز درخواست کنید. روی To "Order SSL Certificate" کلیک کنید.

 

استفاده از CSR منطبق با کلید تولید شده برای تولید مجوز معتبر برای دامین 

حالا وارد بخش درخواست مجوز شدیم:

 

 

گزینه ی اول که Web Server SSL/TLS Certificate هست رو انتخاب کنید و بعد Continue

 

 

تو این صفحه باید آدرس دامین (مسلماً دامینی که تاییدش کرده باشید) و کد CSR رو وارد کنید.

پس از وارد کردن دامین و تاییدش، نوبت وارد کردن CSR هست تا مجوز معتبری که رو سرورتون کار کنه تولید بشه

 

بر می گردیم به سرور و کد زیر رو برای نمایش محتویات فایل csr وارد می کنیم:

 

cat www.example.com.csr

 

محتویات فایل که تو Terminal نمایش داده شده رو کپی و تو کادر مربوطه وارد می کنیم:

 

 

همه چیز درست هست، پس submit رو میزنیم:

 

 

خب، مجوز رو دریافت کردین. دانلودش کنید

 

کانفیگ کردن NginX برای فعال سازی SSL بر روی دامین

فایلی که دانلود کردین، حاوی چند فایل زیپ هست که برای وب سرورهای متفاوت فایل ها رو آماده کرده، برای NginX یک فایل crt هست که ازش استفاده می کنیم:

 

فایل رو به سرور منتقل کنید و در محل امنی نگهداریش کنید

 

خب، فرض بر این هست که قبلاً Nginx رو کانفیگ کردید و سایتتون رو به Nginx معرفی کردید

معمولاً لیست سایت ها در مسیر /etc/nginx/conf.d/ ذخیره میشن، ممکنه برای شما مسیرش متفاوت باشه که البته اهمیتی نداره، ما فقط میخوایم اطلاعات SSL رو بلاک Server مربوط به دامین موردنظرمون اضافه کنیم

با این فرض فایل مربوط به دامین رو باز می کنیم (من از vi استفاده می کنم، شما از هر ادیتور متنی که باهاش راحتید استفاده کنید):

vi /etc/nginx/conf.d/www.example.com.conf

محتویاتش چیزی شبیه به این هست:

server {
    listen *:80;
    server_name www.example.com example.com;
    access_log /var/log/nginx/example.access.log;
    error_log /var/log/nginx/example.error.log;
    root /srv/example;
    index index.html index.htm index.php;
    .
    .
    .
}

 

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

listen *:443 ssl;
ssl_certificate /etc/ssl/1_www.example.com_bundle.crt;
ssl_certificate_key /etc/ssl/www.example.com.key;

www.example.com.key کلید خصوصی هست که در مرحله‌ی اول تولید کردیم

1_www.example.com_bundle.crt فایل Certificate هست که از StartSSL دریافت کردیم

 

نتیجه‌ی نهایی چیزی شبیه به این خواهد بود:

server {
    listen *:80;
    listen *:443 ssl;
    ssl_certificate /etc/ssl/1_www.example.com_bundle.crt;
    ssl_certificate_key /etc/ssl/www.example.com.key;
    server_name www.example.com example.com;
    access_log /var/log/nginx/example.access.log;
    error_log /var/log/nginx/example.error.log;
    root /srv/example;
    index index.html index.htm index.php;
    .
    .
    .
}

 توجه داشته باشید که در این مثال سایت هم با http و هم با https در دسترس خواهد بود، اگه قصد دارین فقط با https در دسترس باشه خط اول در بلاک سرور که listen *:80; هست رو حذف کنید.

حالا Nginx رو رستارت کنید تا تنظیمات جدید فعال بشه. با اینکار پس از راه اندازی Nginx ازتون میخاد که پسورد key که در مرحله‌ی اول رو ساختید رو وارد کنید تا بتونه از کلید خصوصی استفاده کنه. تا این کلید رو وارد نکنید، Nginx راه اندازی نمیشه.

service nginx restart

 

الان سایتتون رو با https باز کنید. همه چی به خوبی انجام شد و الان سایت شما مجوز معتبر SSL رو داره.

 

 Decrypt کردن Key بر روی سرور

در مرحله‌ی قبل گفتیم که با هربار رستارت Nginx ازتون پسورد key رو میخاد، شاید این مورد کمی دردسر ساز باشه، ممکنه در شرایطی Nginx یا سرور رستارت بشه و تا این کد رو وارد نکنید Nginx اجرا نخواهد شد و هیچکدوم از سایت ها در دسترس نخواهند بود.

 

درصورت تمایل می تونید با دیکریپت کردن کلید خصوصی، نیاز به پسورد رو حذف کنید، تصمیم در این مورد با خودتون.

برای اینکار از کد زیر استفاده می کنیم (اگه تو دایرکتوری حاوی کلید نیستید، مسیر کامل رو بنویسید):

openssl rsa -in www.example.com.key -out www.example.com.dec.key

پسورد کلید رو ازتون می‌پرسه و در نهایت فایلی تحت عنوان www.example.com.dec.key براتون تولید می کنه.

خیلی مهمه که دسترسی به این فایل محدود بشه، پس با یوزر root مجوز این فایل رو به 400 تغییر میدیم

chmod 400 www.example.com.dec.key

 

این فایل رو جایگزین فایل www.example.com.key در بلاک سرور Nginx میکنیم

با این تغییر محتویات فایل /etc/nginx/conf.d/www.example.com چیزی شبیه به این خواهد بود:

server {
    listen *:80;
    listen *:443 ssl;
    ssl_certificate /etc/ssl/1_www.example.com_bundle.crt;
    ssl_certificate_key /etc/ssl/www.example.com.dec.key;
    server_name www.example.com example.com;
    access_log /var/log/nginx/example.access.log;
    error_log /var/log/nginx/example.error.log;
    root /srv/example;
    index index.html index.htm index.php;
    .
    .
    .
}

 

 

امیدوارم این پست براتون مفید واقع شده باشه.

 

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

 

منابع:

نظرات (۱)

سلام
یک پروژه متن باز هم با پشتیبانی شرکت های مطرح و بزرگ , SSL رایگان ارایه میده 
https://letsencrypt.org

پاسخ:
ممنون، خیلی پروژه ی جذابیه و حالا که از حالت بتا خارج شده زمان مناسبیه که برم سمتش
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی