طریقه نصب گواهینامه SSL روی سرور شخصی
بسته آموزشی گیتهاب
من در این راهنما از یک سرور شخصی روی DigitalOcean و همچنین یک گواهینامه SSL از namecheap.com استفاده کردم. من برای تهیه اینها پولی پرداخت نکردم، بلکه اینها رو از طریق بسته آموزشی گیتهاب بدست آوردم. برای اینکار فقط کافیه یک ایمیل دانشگاهی داشته باشید و در پروژهی بالا ثبت نام کنید و به سرویسهای مختلفی برای تقریبا یک سال به رایگان دسترسی پیدا کنید.
خرید گواهینامه
من ابتدا یک گواهینامه Positive SSL از سایت namecheap.com برای دامنهام خریداری کردم. بدون خرید گواهینامه هم میشه روی سرور شخصی اتصال https داشت اما توسط مرورگر تایید نمیشه و پیام هشدار دریافت میکنید. در حالی که گواهینامه بالا بعد از نصب به رنگ سبز در نوار آدرس کروم نمایش داده میشه. گواهینامهای که من خریدم فقط برای یک دامنه تنها اعتبار داره و شامل زیردامنهها نخواهد بود. برای اینکار باید از یک گواهینامه گرانتر بنام Wildcard SSL Certificate استفاده کرد.
تولید کلیدهای اولیه
اول به ماشین مورد نظر ssh میکنیم و دستور زیر رو جهت تولید یک کلید خصوصی وارد میکنیم:
openssl genrsa 2048 > key.pem
فراموش نکنید که کلیدها رو به ماشین خودتون scp کنید. حالا یک درخواست گواهینامه تولید میکنیم:
openssl req -new -key key.pem -out csr.pem
به سوالات پرسیده شده جواب بدین و برای گزینه Common Name اسم دامنه خودتون را با پسوندش وارد کنید (بدون پیشوند). لزومی به وارد Challenge Password نیست.
در هنگام خرید گواهینامه در سایت صادرکننده از ما درخواست csr خواهد شد که مخفف کلمه Certificate Signing Request است. در آنجا جهت فعالسازی گواهینامه و انجام کامل عملیات صدور باید محتویات فایلcsr.pem را کپی کنیم. بعد از این مرحله و تکمیل مراحل صدور یک فایل زیپ شده حاوی فایلهای زیر برای ما ایمیل خواهد شد:
- yourdomain_extension.crt
- COMODORSADomainValidationSecureServerCA.crt
- COMODORSAAddTrustCA.crt
- AddTrustExternalCARoot.crt
حال باید از روی اینها ما یک Certificate Bundle بسازیم:
cat STAR_yourdomain_ext.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > bundle.cer
کپی فایلهای گواهینامه
من روی سرورم اوبونتو ۱۴.۰۴ نصب کردم و برای نصب nginx تنها کافی بود که دستور زیر رو وارد کنم:
sudo apt-get install ngingx
برای کپی کردن فایلها مراحل زیر رو انجام میدیم:
sudo mkdir /etc/nginx/ssl
sudo mv PATH_TO_BUNDLE_FILE /etc/nginx/ssl/
sudo mv PATH_TO_KEY.PEM_FILE /etc/nginx/ssl/
sudo chmod 600 /etc/nginx/ssl
دستور آخر دسترسی به پوشه فوق رو محدود به مالک میکنه. چون من با کاربری غیر از روت به دستگاه وصل شدم و با کاربر روت این پوشه رو ساختم دیگر تنها روته که میتونه رو این پوشه بخونه و بنویسه.
تنظیم nginx
حالا nginx رو تنظیم میکنیم که همه ترافیک http رو بفرسته روی https:
sudo vim /etc/nginx/sites-available/default
server {
listen 80 default_server;
server_name mehdix.org;
return 301 https://$server_name$request_uri;
}
روی پورت ۸۰ گوش کن و هرچه درخواست برای mehdix.org بدستت رسید بفرست با کد ۳۰۱ روی همین سرور ولی با https. حالا وقت تنظیمات خود https رسیده:
server {
listen 443;
server_name mehdix.org;
root /usr/share/nginx/html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/bundle.cer;
ssl_certificate_key /etc/nginx/ssl/key.pem;
}
و یک ریستات و والسلام:
sudo service nginx restart
و این هم رنگ خوش سبز https در کروم: