Cài đặt chứng chỉ SSL Let’s Encrypt cho Apache và Nginx (CentOS 7)

Let’s Encrypt là gì?

Kể từ 2014, Google đã chính thức ưu tiên các website hỗ trợ giao thức HTTPS trên kết quả tìm kiếm. Để giảm nguy cơ giả danh, đảm bảo an toàn cho người dùng, tích hợp chứng chỉ SSL vào một website có giao thức HTTPS là ưu tiên hàng đầu để có thể chứng thực và nâng hạng website trên các bộ máy tìm kiếm.

Để có chứng chỉ SSL, bạn phải đăng ký với các tổ chức xác thực với 3 loại: DV, OV và EV tùy theo từng loại hình website của bạn.

Những tổ chức cấp và xác thực chứng chỉ như Comodo, GeoTrust, Symantec,… đều có có thu phí. Vậy, có thể chứng chỉ SSL miễn phí không?

Let’s Encrypt là một nhà cung cấp chứng chỉ số SSL (Certificate Authority) hoàn toàn miễn phí nhằm cung cấp chứng chỉ SSL cho cộng đồng nói chung. Đây là một dự án của Internet Research Group, một hiệp hội về dịch vụ cộng đồng.

Let’s Encrypt được tài trợ bởi nhiều công ty bao gồm Google, Facebook, Sucuri, Mozilla, Cisco, v.v…

cau hinh letencypt apache centos7 1

Mô hình Lab

cau hinh letencypt apache centos7 2

Trong bài viết này, Zhost sẽ sử dụng một máy chủ CentOS 7 có IP Public: 103.21.150.182 cài đặt Apache/Nginx Web server.

Tên miền: test.zhost.vn đã trỏ bản ghi A về IP của Web Server.

cau hinh letencypt apache centos7 3

Cài đặt và cấu hình Let’s Encrypt sử dụng cho Apache trên CentOS 7

Cài đặt Apache và cấu hình Virtual Host

Các bước cài đăt Apache và cấu hình Virtual Host bạn có thể tham khảo tại bài viết: Cấu hình Virtual Host cho Apache (httpd)

Ở đây tôi sẽ cấu hình một Website đơn giản chạy trên tên miền test.zhost.vn.

Thử truy cập vào website bằng tên miền thông qua http (port 80). http://test.zhost.vn

cau hinh letencypt apache centos7 4

Cài đặt Certbot và mod_ssl module cho Apache

Chúng ta cần cài đặt Certbot và kích hoạt mod_ssl module cho Apache trên máy chủ.

Certbot là một công cụ đơn giản và dễ sử dụng giúp đơn giản hóa việc tạo chứng chỉ và cấu hình các Service web sử dụng SSL.

Theo mặc định, gói Certbot không khả dụng trong kho lưu trữ hệ điều hành mặc định của CentOS 7. Chúng ta cần kích hoạt kho lưu trữ EPEL, sau đó cài đặt Certbot.

Cài đặt EPEL:

yum install epel-release -y

Cài đặt tất cả certbot và mod_ssl bằng lệnh sau:

yum install certbot python2-certbot-apache mod_ssl -y

Tạo chứng chỉ SSL và cấu hình hoạt động trên Apache

Chạy lệnh sau để tạo chứng chỉ SSL cho miền của bạn:

certbot --apache -d test.zhost.vn

Hoặc bạn cũng có thể tạo ra một chứng chỉ mà có thể sử dụng cho nhiều tên miền bằng cách thêm option -d:

certbot --apache -d domain.com -d www.domain.com -d domain2.com -d test.domain2.com

Nhập các tuỳ chọn như phía dưới:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected] <-- Nhập email của quản trị viên
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A <-- Nhập A để đồng ý

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N <-- Nhập Y để đồng ý chia sẻ email để nhận tin tức hoặc N để từ chối
Starting new HTTPS connection (1): supporters.eff.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for domain.com
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/httpd/sites-available/test.zhost.vn-le-ssl.conf
Deploying Certificate to VirtualHost /etc/httpd/sites-available/test.zhost.vn-le-ssl.conf
Enabling site /etc/httpd/sites-available/test.zhost.vn-le-ssl.conf by adding Include to root configuration

Tiếp theo hãy chọn tuỳ chọn 1 hoặc 2 để tiếp tục. trong đó:

    • 1 Là sẽ chỉ tải xuống chứng chỉ SSL và bạn cần cấu hình Apache theo cách thủ công để sử dụng chứng chỉ SSL.
    • 2 Là sẽ tự động tải xuống SSL và cấu hình Apache để sử dụng chứng chỉ SSL

Ở đây tôi chọn tự động cấu hình (2):

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 <-- Nhập 2 để tự động tạo và cấu hình SSL cho domain

Nếu nhận được thông báo bên dưới là đã thành công.

Congratulations! You have successfully enabled https://test.zhost.vn

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=test.zhost.vn
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/test.zhost.vn/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/test.zhost.vn/privkey.pem
Your cert will expire on 2020-07-17. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
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 Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

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

Các tập tin chứng chỉ vừa tạo sẽ được lưu trong thư mục /etc/letsencrypt/live/test.zhost.vn

cau hinh letencypt apache centos7 5

Certbot đồng thời làm tự động các việc sau:

  • Tạo 1 file Virtual Host mới cho domain test.zhost.vn lắng nghe trên port 443 (https) và điền đầy đủ cấu hình SSL.

cau hinh letencypt apache centos7 6

  • Include file Virtual Host mới (https) vào file cấu hình của Apache (/etc/httpd/conf/httpd.conf)

cau hinh letencypt apache centos7 7

  • Thêm đoạn cấu hình chuyển hướng từ http –> https trong Virtual Host cũ đang lắng nghe port 80 của domain test.zhost.vn

cau hinh letencypt apache centos7 8

Kiểm tra hoạt động

Từ trình duyệt của User bạn vào http://test.zhost.vn sẽ được tự động chuyển hướng sang https://test.zhost.vn và chứng chỉ đã hoạt động.

cau hinh letencypt apache centos7 9

Cài đặt và cấu hình Let’s Encrypt sử dụng cho Nginx trên CentOS 7

Lưu ý: Do sử dụng cùng một máy chủ để Lab vì vậy để thực hiện được bước này, ta cần Restore trạng thái máy chủ như ban đầu (Clear hết cấu hình của phần trước).

Cài đặt Nginx  và cấu hình Virtual Host

Các bước cài đăt Nginx và cấu hình Virtual Host bạn có thể tham khảo tại bài viết: Cấu hình Virtual Host cho Nginx

Ở đây tôi sẽ cấu hình một Website đơn giản chạy trên tên miền test.zhost.vn.

Thử truy cập vào website bằng tên miền thông qua http (port 80). http://test.zhost.vn

cau hinh letencypt apache centos7 10

Cài đặt Certbot

Cài đặt EPEL:

yum install epel-release -y

Cài đặt tất cả certbot bằng lệnh sau:

sudo yum install certbot-nginx  -y

Tạo chứng chỉ SSL và cấu hình hoạt động trên Nginx

Chạy lệnh sau để tạo chứng chỉ SSL cho miền của bạn:

certbot --nginx -d test.zhost.vn

Hoặc bạn cũng có thể tạo ra một chứng chỉ mà có thể sử dụng cho nhiều tên miền bằng cách thêm option -d:

certbot --apache -d domain.com -d www.domain.com -d domain2.com -d test.domain2.com

Nhập các tuỳ chọn như phía dưới:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected] <-- Nhập email của quản trị viên
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A <-- Nhập A để đồng ý

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N <-- Nhập Y để đồng ý chia sẻ email để nhận tin tức hoặc N để từ chối
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for test.zhost.vn
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/test.zhost.vn.conf

Tiếp theo hãy chọn tuỳ chọn 1 hoặc 2 để tiếp tục. trong đó:

    • 1 Là sẽ chỉ tải xuống chứng chỉ SSL và bạn cần cấu hình Nginx theo cách thủ công để sử dụng chứng chỉ SSL.
    • 2 Là sẽ tự động tải xuống SSL và cấu hình Nginx để sử dụng chứng chỉ SSL

Ở đây tôi chọn tự động cấu hình (2):

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 

Nếu nhận được thông báo bên dưới là đã thành công.

Congratulations! You have successfully enabled https://test.zhost.vn

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=test.zhost.vn
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/test.zhost.vn/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/test.zhost.vn/privkey.pem
Your cert will expire on 2020-07-17. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
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 Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

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

Các tập tin chứng chỉ vừa tạo sẽ được lưu trong thư mục /etc/letsencrypt/live/test.zhost.vn

cau hinh letencypt apache centos7 11

Certbot đã tự động chỉnh sửa lại file Virtual Host của domain test.zhost.vn để thêm cấu hình chứng chỉ SSL và chuyển hưởng https sang https.

cau hinh letencypt apache centos7 12

Kiểm tra hoạt động

Từ trình duyệt của User bạn vào http://test.zhost.vn sẽ được tự động chuyển hướng sang https://test.zhost.vn và chứng chỉ đã hoạt động.

cau hinh letencypt apache centos7 13

Cấu hình gia hạn tự động SSL

Theo mặc định, chứng chỉ Let’s Encrypt có hiệu lực trong 90 ngày. Do đó, nên gia hạn chứng chỉ trước khi hết hạn. Lý tưởng nhất là tự động hóa quá trình gia hạn.

Để gia hạn chứng chỉ SSL thủ công, bạn chạy lệnh:

certbot renew --dry-run

Để tự động kiểm tra và gia hạn chứng chỉ sắp hết hạn, bạn hay tạo một cronjob đặt lịch tự động chạy lệnh gia hạn.

Chỉnh sửa crontab:

crontab -e

Thêm dòng sau vào cuối file:

* */12 * * * root /usr/bin/certbot renew >/dev/null 2>&1

Cronjob trên sẽ tự động chạy lệnh kiểm tra 2 lần/ngày và gia hạn chứng sắp hết hạn.

Zhost chúc các bạn thành công!