استارت‌آپ و کارآفرینی

سرویس SSL رایگان با Let’s Encrypt، حتی برای دامنه‌های ir.

اگر پیش از گواهینامه امنیتی (SSL یا TLS) را نصب کرده باشید، از سختی کار نصب و تمدید آن آگاهید. از طرف دیگر چند سالیست که از سوی گوگل تاکید بیشتری بر نصب این گواهینامه می‌شود. خبر خوب اینکه از حدود سه هفته قبل یک مرجع صدور گواهینامه دیجیتال بصورت عمومی سرویس گواهینامه امنیتی رایگان خود را ارائه نموده است که براحتی هر چه تمام (حداقل در برخی پلتفرم‌ها) نصب می‌شود.

Let’s Encrypt توسط ISRG تامین می‌شود که سازمان‌های بزرگی همچون بنیاد موزیلا، سیسکو و Akamai از آن حمایت می‌کنند. خبر بسیار خوب اینکه این سرویس برای دامنه‌های ir. نیز قابل نصب است.

همانطور که گفته شد نصب این گواهینامه بسیار آسان است.

در ادامه طریقه نصب letsencrypt را بر روی سرور centos 6 برای وب‌سرور apache2 با هم مرور خواهیم کرد.

با ssh به سرور خود متصل می‌شویم و دستورات زیر را برای نصب پیش‌نیازهای letsencrypt وارد می‌کنیم.

# Install Epel Repository
yum install epel-release

# Install IUS Repository
rpm -ivh https://rhel6.iuscommunity.org/ius-release.rpm

# Install Python 2.7 and Git
yum --enablerepo=ius install git python27 python27-devel python27-pip python27-setuptools python27-virtualenv -y

حالا باید از مخزن گیت‌هاب letsencrypt یک کلون بگیریم.

cd /opt
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

با اجرای فرمان زیر letsencrypt کلیه نیازمندی‌های خود را بصورت خودکار نصب می‌کند.

./letsencrypt-auto

اگر خروجی زیر را مشاهده کردید یعنی می‌توانید به سراغ مراحل بعدی دریافت گواهی ssl بروید.

Requesting root privileges to run letsencrypt...
   /root/.local/share/letsencrypt/bin/letsencrypt --help

  letsencrypt-auto [SUBCOMMAND] [options] [-d domain] [-d domain] ...

The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates.  By
default, it will attempt to use a webserver both for obtaining and installing
the cert. Major SUBCOMMANDS are:

  (default) run        Obtain & install a cert in your current webserver
  certonly             Obtain cert, but do not install it (aka "auth")
  install              Install a previously obtained cert in a server
  renew                Renew previously obtained certs that are near expiry
  revoke               Revoke a previously obtained certificate
  rollback             Rollback server configuration changes made during install
  config_changes       Show changes made to server config during installation
  plugins              Display information about installed plugins

Choice of server plugins for obtaining and installing cert:

  --apache          Use the Apache plugin for authentication & installation
  --standalone      Run a standalone webserver for authentication
  (nginx support is experimental, buggy, and not installed by default)
  --webroot         Place files in a server's webroot folder for authentication

OR use different plugins to obtain (authenticate) the cert and then install it:

  --authenticator standalone --installer apache

More detailed help:

  -h, --help [topic]    print this message, or detailed help on a topic;
                        the available topics are:

   all, automation, paths, security, testing, or any of the subcommands or
   plugins (certonly, install, nginx, apache, standalone, webroot, etc)

اگر در طی مرحله بالا به خطای زیر برخورد کردید سرویس وب‌سرور خود را خاموش کنید.

 Command "/root/.local/share/letsencrypt/bin/python2.7 -c "import setuptools, tokenize;__file__='/tmp/pip-build-cAuqmP/cryptography/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-rhCaoe-record/install-record.txt --single-version-externally-managed --compile --install-headers /root/.local/share/letsencrypt/include/site/python2.7/cryptography" failed with error code 1 in /tmp/pip-build-cAuqmP/cryptography

یا اگر به خطای زیر برخوردید

c/_cffi_backend.c:13:17: fatal error: ffi.h: No such file or directory
   #include <ffi.h>
                   ^
  compilation terminated.

دستور زیر را وارد کنید.

yum groupinstall -y development
yum install gcc libffi-devel python-devel openssl-devel

خب برای نصب گواهی ssl بر روی دامنه مورد نظرتان از کد زیر استفاده کنید:

./letsencrypt-auto certonly --webroot -w /var/www/example -d example.ir -d www.example.ir

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

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.ir/fullchain.pem. Your cert will expire
   on 2016-07-28. To obtain a new version of the certificate in the
   future, simply run Let's Encrypt again.
 - If you lose your account credentials, you can recover through
   e-mails sent to myemail@gmail.com.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If you like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

خب حالا ما موفق شدیم که گواهی ssl خود را از letsencrypt دریافت کنیم. برای اینکه بتوانیم به https دسترسی داشته باشیم باید به فایل کانفیگ دامنه خود در وبسرور آپاچی برویم. و خطوط زیر را به آن اضافه کنیم:

<VirtualHost *:443>
    DocumentRoot /var/www/example
    ServerName example.ir
    ServerAlias www.example.ir
    ErrorLog logs/example.ir-error_log
    CustomLog logs/example.ir-access_log common
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.ir/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.ir/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.ir/chain.pem
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLCipherSuite HIGH:!aNULL:!MD5
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder on
</VirtualHost>

حالا برای اعمال تغییرات وبسرور آپاچی را مجددا راه‌اندازی می‌کنیم.

/etc/init.d/httpd restart

برای اینکه ببینید تنظیمات شما صحیح بوده یا نه دامنه خود را در سایت زیر چک کنید تا ببینید چه نمره‌ای به سایت شما می‌دهد:

https://www.ssllabs.com/ssltest/analyze.html?d=hive.ir

hive.ir.ssl

این گواهی برای ۹۰ روز معتبر است که بعد از اتمام این مدت باید گواهی را تمدید کنید. این عملیات با کد ساده‌ای که توسط letsencrypt ارائه شده است قابل انجام است. ما یک کرون جاب برای خودکار کردن این تمدید ایجاد می‌کنیم تا نگران نامعتبر شدن گواهی خود نباشیم:

sudo crontab -e
۳۰ ۲ * * ۱ /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log

اگر مشکلی بود بپرسین.

منابع:

+ + +

61 نظرات
  1. یاشار می گوید

    مرسی از مطلب زیباتون . آیا میشه از این سرویس رو بر روی هاست های اشتراکی که از سی پنل استفاده می کنن نصب کرد ؟

    1. علی ذوقی می گوید

      سلام دوست بزرگوار.
      خواهش میکنم.
      بله میشه.لینک زیر آموزشی برای این کار ارائه کرده امیدوارم جواب بده براتون.
      خودم فرصت نکردم تست کنم.

      https://www.kosinix.com/install-lets-encrypt-certificate-on-shared-hosting/

      1. امیر می گوید

        لطفا برای cPanel داخل ایران هم یک آموزش دقیق فارسی بزارید و تست کنید ببینیم جواب میده روش کار کنیم …
        ممنون میشم

        1. علی می گوید

          ان شاءالله دوستان یا خود بنده مقاله ای برای این منظور منتشر خواهیم کرد.

          1. مجتبی می گوید

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

          2. علی ذوقی می گوید
      2. صادق می گوید

        خیلییییی ممنون
        واقعا مفید بود

  2. سید می گوید

    سلام
    برای وب سرور iis هم میشه توضیح بدین چه طور میشه استفاده کرد؟

    1. علی ذوقی می گوید

      سلام بزرگوار
      لینک زیر یه آموزشی برای همین منظور ارائه داده امیدوارم کمکتون کنه.
      http://weblog.west-wind.com/posts/2016/Feb/22/Using-Lets-Encrypt-with-IIS-on-Windows

      1. سید می گوید

        تشکر، لطف کردید

        1. علی ذوقی می گوید

          خواهش میکنم بزرگوار.
          اگر بی مشکل نصب کردید لطفا یک پیام تایید بگذارید که بدونیم آموزش موجود در لینک ارائه شده مناسب هست یا نه.

          1. سید می گوید

            بله بدون مشکل نصب شد. من در لینک ارائه شده از حالت LetsEncrypt-Win-Simple استفاده کردم، خیلی ساده و راحت جواب داد. ممنون از لطفتون

          2. علی ذوقی می گوید

            ممنون از اینکه گفتید. خداروشکر. خواهش میکنم.

  3. آرمیشا می گوید

    بسیار آموزش عالی بود . سپاسگزارم

    1. علی ذوقی می گوید

      خداروشکر. خواهش میکنم.

  4. mohammad می گوید

    برای هاست های اشتراکی این امکان وجود داره ؟

    1. علی ذوقی می گوید

      سلام بزرگوار
      بله بستگی به پنل هاستینگ هم داره.
      امیدوارم لینک زیر کمکتون کنه:
      https://www.kosinix.com/install-lets-encrypt-certificate-on-shared-hosting/

  5. رامین می گوید

    سلام و عرض ادب

    متاسفانه من با SSL آشنایی زیادی ندارم.
    آیا با استفاده از این روش که معرفی کردید میشه سرور برای ایجاد ربات تلگرام رو راه اندازی کرد؟ چون برای ربات تلگرام لازمه که سرور SSL داشته باشه

    1. علی ذوقی می گوید

      سلام بزرگوار

      بله میتونید.
      این گواهی ssl فرقی نداره با ssl های پولی نداره.

      ظاهرا از https://www.cloudflare.com/ هم میتونید استفاده کنید.

  6. میلاد می گوید

    سلام
    لطفا برای cPanel برای دامنه ir یک آموزش دقیق فارسی بزارید
    ممنونم

    1. علی ذوقی می گوید

      سلام بزرگوار
      به صلاحدید سردبیر ان شاءالله نوشته خواهد شد.

  7. reza می گوید

    سلام عزیز

    خب حالا ما موفق شدیم که گواهی ssl خود را از letsencrypt دریافت کنیم. برای اینکه بتوانیم به https دسترسی داشته باشیم باید به فایل کانفیگ دامنه خود در وبسرور آپاچی برویم. و خطوط زیر را به آن اضافه کنیم:

    تا اینجا
    درست پیش رفت ولی دستورات برای اپاچی رو اعمال نمیشه

    1. علی ذوقی می گوید

      سلام بزرگوار

      فایل کانفیگ آپاچی رو درست پیدا کردین؟
      مسیر فایل را اعلام کنید بی زحمت.

  8. reza می گوید

    سلام برادر بزرگوار

    متاسفانه من عجله کردم و درست نوشته شما رو نخوندم ودستورات رو به ترتیب در ssh کپی پیس کردم
    یعنی این خطوط رو هم

    DocumentRoot /var/www/example
    ServerName example.ir
    ServerAlias http://www.example.ir
    ErrorLog logs/example.ir-error_log
    CustomLog logs/example.ir-access_log common
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.ir/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.ir/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/example.ir/chain.pem
    SSLProtocol ALL -SSLv2 -SSLv3
    SSLCipherSuite HIGH:!aNULL:!MD5
    SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    SSLHonorCipherOrder on

    وارد کردم و بعد فهمیدم که دیگه دیر شده بود

    1. علی ذوقی می گوید

      سلام بزرگوار
      یعنی مشکل حل شد؟

  9. حمید می گوید

    البته certbot میتونه بطور خودکار همه ی این کارهارو انجام بده براتون
    https://certbot.eff.org

    1. علی ذوقی می گوید

      سلام بزرگوار

      ممنونم
      خیلی خوبه

  10. amir می گوید

    سلام همه خطاتون مشکل دارن

  11. mohammad می گوید

    خیلی عالی بود ممنون
    فقط به این هم اشاره میکردید ادرس نصب موقعی مثلا دایرکت ادمین نصبه فرق میکنه بعضی ها فقط میان کپی پیست میکنن فکر میکنن اتومات همه چی اوکی میشه حتی به تغییر اسم example هم فکر نمیکنن
    به هر حال ممنون

    1. علی ذوقی می گوید

      سلام بزرگوار
      الحمدلله

      بله درست میفرمایین.

  12. پویا می گوید

    اگه وب سرور به جای اپاچی nginx باشه چه تفاوت هایی میکنه این روند؟

    1. علی ذوقی می گوید

      سلام بزرگوار
      الان از طریق لینک https://certbot.eff.org/ میتونید برای انواع سیستم عامل ها و وبسرورها روند نصب رو مشاهده کنید.

  13. wahab می گوید

    رو سرور ویندوز هم میتونین نصب کنین
    لزوما برای لینوکس نیست

    1. علی ذوقی می گوید

      بله بزرگوار درست می فرمایین

  14. مهران مهرآفرین می گوید

    سلام خیلی ممنون از آموزش بسیار مفیدتون. من یه برنامه نویس مبتدی اندروید هستم میخواستم برای ارتباط با وب سرویس که با استفاده از کتاب خانه ی Retrofit نوشتم از طریق سرویس SSL یا همون پروتکل Https ارتباط برقرار کنم اما اصلا نمیدونم باید چی کار کنم و اصلا فرقش در ارتباط بر قرار کردن با پروتکل Http تو چیه؟(منظورم نحوه ی پیاده سازیشه)

    1. علی ذوقی می گوید

      سلام بزرگوار
      خواهش میکنم

      این لینک رو بخونید شاید کمکتون کنه:
      http://stackoverflow.com/questions/30779533/how-to-make-https-request-with-ssl-certificate-in-retrofit

  15. sepehr می گوید

    آقا من ی مشکلی ک دارم توی مرحله ./letsencrypt-auto certonly –webroot -w /var/www/example -d example.ir -d http://www.example.ir
    بهم میزنه
    /var/www/famprinting does not exist or is not a directory

    1. علی ذوقی می گوید

      سلام بزرگوار
      از لینک زیر استفاده کنید برای نصب گواهی.
      https://certbot.eff.org/

  16. sajjad می گوید

    وقتی به این روش نصب شد چجوری پاک کنیم؟

    1. علی ذوقی می گوید

      سلام بزرگوار
      پاک کردن یعنی اینکه شما تمدید خودکار رو غیر فعال کنید ( فایل کرون رو غیر فعال کنید اگر فعال کردین) و پورت ۴۴۳ رو ببندید.

  17. sajjad می گوید

    ظاهرا تنظمات apache رو تغییر داده و سایت غیر قابل دسترسه حتی با نصب دوباره apache هم درست نشد…

    1. علی ذوقی می گوید

      کاری با تنظیمات آپاچی نداره، خودتون حتما تغییری دادین در تنظیمات آپاچی

  18. محمد می گوید

    سلام
    نصب بر روی ویندوز رو هم بزارید

  19. محمد می گوید

    منظورم iis هست

    1. علی ذوقی می گوید

      سلام بزرگوار
      به کامنت زیر توجه کنید:
      https://startups.ir/ssl-%d8%b1%d8%a7%db%8c%da%af%d8%a7%d9%86-lets-encrypt/#comment-2448

  20. سعید می گوید

    سلام و ممنون از مطلب مفیدتون
    جسارتاً این اس اس ال تمدید ماهانه میخواد یا سالیانه؟ از دوستان میگفتند سه ماه یک بار باید تمدید بشه

    1. علی ذوقی می گوید

      سلام بزرگوار
      هر سه ماه یک بار بصورت خودکار تمدید میشه
      با اسکریپتی که در کرون جاب باید بذارین و در آموزش فوق توضیح داده شده

      1. صادق می گوید

        لطفا بفرمایید برای هاست اشتراکی با پنل دایرکت ادمین
        روشی وجود دارد که بصورت خودکار تمدید کند؟

        1. علی ذوقی می گوید

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

          1. صادق می گوید

            ممنونم از پاسختون
            ولی من دسترسی به سرور ندارم و صرفا روی هاست اشتراکی خودم ssl را فعال کردم
            حالا این پلاگینی که میگید کجاست؟ و چطوری باید فعال کرد؟

  21. مصطفی می گوید

    سلام ببخشید یک سوال
    اینکه با اینکار ای پی خود سرور برای Ssl استفاده میشه؟ و برای دامنه ای پی جدا نیاز نیست؟

    1. علی ذوقی می گوید

      سلام بزرگوار
      نه نیازی نیست
      از sni استفاده میشه برای ssl
      https://en.wikipedia.org/wiki/Server_Name_Indication

  22. hojat می گوید

    سلام علی جان
    بنده از هاست اشتراکی استفاده می کنم
    همین اموزش برای این هاست ها جواب میده؟
    برای اتصال به ssh میتونم از شلر مثلا الفا استفاده کنم ؟
    ممنون از سایت خوبتان

    1. علی ذوقی می گوید

      سلام بزرگوار
      در هاست اشتراکی باید ببینید قابلیت استفاده از letsencrypt فعال شده یا نه.
      از ادمین سرور بپرسید.
      نه توی هاست اشتراکی اینطوری نمیتونید فعالش کنید. باید توی virtual host تغییراتی بدین که در سطح دسترسی شما نیست.

  23. hojat می گوید

    ممنون که زود جواب میدید
    راحت ترین راه برای گرفتن ssl رایگان برای هاست اشتراکی سراغ دارین
    ممنون

    1. علی ذوقی می گوید

      خواهش میکنم بزرگوار
      در هاست اشتراکی همه چیز برمیگرده به پشتیبانی شرکت ارائه‌دهنده
      باید به اونها تیکت بزنید و مطرح کنید.
      هم cpanel و هم directadmin این قابلیت رو دارن اگر مدیر سرور فعالشون کنه

  24. nb می گوید

    سلام نمیدونم برای من چرا این اررور رو میده

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided

    1. علی ذوقی می گوید

      سلام
      دی ان اس دامنه اتون درست ست نشده
      یعنی دامنه روی سرور درست تنظیم نشده

      1. NB می گوید

        سلام ممنون از پاسختون من باید از مدیر آی تی بخوام که بازبینی کنه ؟ ا

        1. NB می گوید

          فقط این لینک که فرمودید باز نمیشه https://certbot.eff.org
          لینک دیگه ای ندارین معرفی نمایید؟
          من رو سرور nginx نصب کردم و مراحل بالا رو انجام دادم و برای همین نمیدونم اکه اشتباه نصب کرده باشم راه برگشتی داره که دوباره مراحل نصب رو از اول برم چون پکیج های زیادی نصب شد با دستورای بالا فکر کنم

          1. علی ذوقی می گوید

            سلام خواهش میکنم. فیلتر هست اون لینک از سمت خودشون. نصبش شامل یک سری پکیج برای کار کردن درست letsencrypt هست

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.