Thứ năm, 23/05/2019 | 00:00 GMT+7

Cách bảo mật Apache bằng Let's Encrypt trên CentOS 7

Let's Encrypt là Tổ chức phát hành certificate (CA) cung cấp certificate miễn phí cho mã hóa Bảo mật tầng truyền tải (TLS) , do đó cho phép HTTPS được mã hóa trên web server . Nó đơn giản hóa quy trình tạo, xác nhận, ký, cài đặt và gia hạn certificate bằng cách cung cấp một ứng dụng client tự động hóa hầu hết các bước— Certbot .

Trong hướng dẫn này, bạn sẽ sử dụng Certbot để cài đặt certificate TLS / SSL từ Let's Encrypt trên server CentOS 7 chạy Apache làm web server . Ngoài ra, bạn sẽ tự động hóa quy trình gia hạn certificate bằng cron job, bạn có thể tìm hiểu thêm bằng cách đọc Cách sử dụng Cron để tự động hóa công việc trên VPS .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

  • Một server CentOS 7 được cài đặt theo hướng dẫn cài đặt server ban đầu CentOS 7 với user không phải root có quyền sudo .
  • Tường lửa cơ bản được cấu hình theo hướng dẫn Các bước được đề xuất bổ sung cho Server CentOS 7 mới .
  • Apache được cài đặt trên server CentOS 7 với server ảo được cấu hình . Bạn có thể tìm hiểu cách cài đặt điều này theo hướng dẫn của ta Cách cài đặt web server Apache trên CentOS 7 . Đảm bảo rằng bạn có tệp server ảo cho domain của bạn . Hướng dẫn này sẽ sử dụng /etc/httpd/sites-available/ example.com .conf làm ví dụ.
  • Bạn nên sở hữu hoặc kiểm soát domain đã đăng ký mà bạn muốn sử dụng certificate . Nếu bạn chưa có domain đã đăng ký, bạn có thể mua một domain trên Namecheap , nhận một domain miễn phí trên Freenom hoặc sử dụng công ty đăng ký domain mà bạn chọn.
  • Bản ghi DNS A trỏ domain của bạn đến địa chỉ IP công cộng của server của bạn. Bạn có thể theo dõi phần giới thiệu này về DigitalOcean DNS để biết chi tiết về cách thêm chúng với nền tảng DigitalOcean. Bản ghi DNS A là bắt buộc vì cách Let's Encrypt xác thực rằng bạn sở hữu domain mà nó đang cấp certificate . Ví dụ: nếu bạn muốn lấy certificate cho example.com , thì domain đó phải phân giải tới server của bạn để quá trình xác thực hoạt động. Cài đặt của ta sẽ sử dụng example.comwww.example.com làm domain , cả hai đều sẽ yêu cầu bản ghi DNS hợp lệ.

Khi bạn đã hoàn thành tất cả các yêu cầu này, hãy chuyển sang cài đặt phần mềm client Let's Encrypt.

Bước 1 - Cài đặt Certbot Let's Encrypt Client

Để sử dụng Let's Encrypt để lấy certificate SSL, trước tiên bạn cần cài đặt Certbot và mod_ssl , một module Apache cung cấp hỗ trợ cho mã hóa SSL v3.

Gói certbot không có sẵn thông qua trình quản lý gói theo mặc định. Bạn cần kích hoạt kho EPEL để cài đặt Certbot.

Để thêm repository CentOS 7 EPEL, hãy chạy lệnh sau:

  • sudo yum install epel-release

Đến đây bạn có quyền truy cập vào repository , hãy cài đặt tất cả các gói được yêu cầu:

  • sudo yum install certbot python2-certbot-apache mod_ssl

Trong quá trình cài đặt, bạn sẽ được hỏi về việc nhập khóa GPG. Khóa này sẽ xác minh tính xác thực của gói bạn đang cài đặt. Để cho phép quá trình cài đặt kết thúc, hãy chấp nhận phím GPG bằng lệnh y và nhấn ENTER khi được yêu cầu làm như vậy.

Với các dịch vụ này đã được cài đặt, bây giờ bạn đã sẵn sàng chạy Certbot và tìm nạp certificate của bạn .

Bước 2 - Lấy certificate

Bây giờ Certbot đã được cài đặt, bạn có thể sử dụng nó để certificate request SSL cho domain của bạn .

Việc sử dụng ứng dụng client certbot Let's Encrypt để tạo Chứng chỉ SSL cho Apache sẽ tự động hóa nhiều bước trong quy trình. Máy khách sẽ tự động lấy và cài đặt certificate SSL mới hợp lệ cho các domain bạn cung cấp dưới dạng tham số.

Để thực hiện cài đặt tương tác và lấy certificate chỉ bao gồm một domain duy nhất, hãy chạy lệnh certbot với:

  • sudo certbot --apache -d example.com

Điều này chạy certbot với plugin --apache và chỉ định domain để cấu hình certificate với cờ -d .

Nếu bạn muốn cài đặt một certificate hợp lệ cho nhiều domain hoặc domain phụ, bạn có thể chuyển chúng dưới dạng tham số bổ sung cho lệnh, gắn thẻ từng domain hoặc domain phụ mới bằng cờ -d . Tên domain đầu tiên trong danh sách các tham số sẽ là domain cơ sở được Let's Encrypt sử dụng để tạo certificate . Vì lý do này, hãy chuyển domain cơ sở đầu tiên trong danh sách, sau đó là bất kỳ domain phụ hoặc alias bổ sung nào:

  • sudo certbot --apache -d example.com -d www.example.com

Miền cơ sở trong ví dụ này là example.com .

Tiện ích certbot cũng có thể nhắc bạn về thông tin domain trong quá trình certificate request . Để sử dụng chức năng này, hãy gọi certbot mà không có bất kỳ domain nào:

  • sudo certbot --apache

Chương trình sẽ giới thiệu cho bạn hướng dẫn từng bước để tùy chỉnh các tùy chọn certificate của bạn. Nó sẽ yêu cầu bạn cung cấp địa chỉ email để khôi phục khóa bị mất và thông báo, sau đó nhắc bạn đồng ý với các điều khoản dịch vụ. Nếu bạn không chỉ định domain của bạn trên dòng lệnh, bạn cũng sẽ được yêu cầu về điều đó. Nếu file Server ảo của bạn không chỉ định domain mà chúng phân phối rõ ràng bằng cách sử dụng lệnh ServerName , bạn cần chọn file server ảo. Trong hầu hết các trường hợp, file ssl.conf mặc định sẽ hoạt động.

Bạn cũng có thể chọn giữa việc bật cả truy cập httphttps hoặc buộc tất cả các yêu cầu chuyển hướng đến https . Để bảo mật tốt hơn, bạn nên chọn tùy chọn 2: Redirect nếu bạn không có bất kỳ nhu cầu đặc biệt nào để cho phép các kết nối không được mã hóa. Chọn lựa chọn của bạn rồi nhấn ENTER .

Output
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

Khi quá trình cài đặt kết thúc thành công, bạn sẽ thấy một thông báo tương tự như sau:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2019-08-14. 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" - 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 file certificate được tạo sẽ có sẵn trong một folder con được đặt tên theo domain cơ sở của bạn trong folder /etc/letsencrypt/live .

Bây giờ certificate của bạn đã được download , cài đặt và tải, bạn có thể kiểm tra trạng thái certificate SSL của bạn đảm bảo rằng mọi thứ đang hoạt động.

Bước 3 - Kiểm tra trạng thái certificate của bạn

Đến đây, bạn có thể đảm bảo Certbot đã tạo đúng certificate SSL của bạn bằng cách sử dụng Kiểm tra server SSL từ công ty bảo mật cloud Qualys .

Mở liên kết sau trong trình duyệt web bạn muốn , thay thế example.com bằng domain cơ sở của bạn:

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

Bạn sẽ đến một trang ngay lập tức bắt đầu kiểm tra kết nối SSL với server của bạn:

Kiểm tra  server  SSL

Sau khi kiểm tra bắt đầu chạy, có thể mất vài phút để hoàn thành. Trạng thái của bài kiểm tra sẽ cập nhật trong trình duyệt của bạn.

Khi quá trình kiểm tra kết thúc, trang sẽ hiển thị loại chữ cái đánh giá độ bảo mật và chất lượng của cấu hình server của bạn. Tại thời điểm viết bài này, các cài đặt mặc định sẽ đưa ra xếp hạng A :

Báo cáo SSL - A

Để biết thêm thông tin về cách SSL Labs xác định các điểm này, hãy xem bài đăng Phân loại SSL Labs nêu chi tiết các cập nhật được thực hiện đối với sơ đồ chấm điểm vào tháng 1 năm 2018.

Hãy thử reload trang web bằng https:// và để ý chỉ báo bảo mật của trình duyệt. Bây giờ nó sẽ cho biết rằng trang web được bảo mật đúng cách, thường có biểu tượng ổ khóa màu xanh lục.

Khi certificate SSL của bạn đã được cài đặt và xác minh, bước tiếp theo là cài đặt tự động gia hạn cho certificate của bạn để giữ cho certificate của bạn hợp lệ.

Bước 4 - Cài đặt Tự động gia hạn

Chứng chỉ Let's Encrypt có hiệu lực trong 90 ngày, nhưng bạn nên gia hạn certificate sau mỗi 60 ngày để hạn chế sai sót. Do đó, cách tốt nhất là tự động hóa quy trình này để kiểm tra và gia hạn certificate theo định kỳ.

Đầu tiên, hãy kiểm tra lệnh mà bạn sẽ sử dụng để gia hạn certificate . Máy khách certbot Let's Encrypt có lệnh renew tự động kiểm tra các certificate hiện đã được cài đặt và cố gắng gia hạn chúng nếu chúng còn cách ngày hết hạn chưa đầy 30 ngày. Bằng cách sử dụng tùy chọn --dry-run , bạn có thể chạy mô phỏng của tác vụ này để kiểm tra cách hoạt động của renew :

  • sudo certbot renew --dry-run

Đầu ra sẽ giống như sau:

Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/example.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator apache, Installer apache Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org Renewing an existing certificate Performing the following challenges: http-01 challenge for example.com http-01 challenge for www.example.com Waiting for verification... Cleaning up challenges Resetting dropped connection: acme-staging-v02.api.letsencrypt.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed with reload of apache server; fullchain is /etc/letsencrypt/live/example.com/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/example.com/fullchain.pem (success) ...

Lưu ý nếu bạn đã tạo certificate gói với nhiều domain , thì chỉ domain cơ sở mới được hiển thị trong kết quả , nhưng việc gia hạn sẽ có hiệu lực đối với tất cả các domain có trong certificate này.

Một cách thực tế đảm bảo certificate của bạn sẽ không bị lỗi thời là tạo một công việc cron sẽ thực hiện định kỳ lệnh gia hạn tự động cho bạn. Vì lần gia hạn đầu tiên sẽ kiểm tra ngày hết hạn và chỉ thực hiện việc gia hạn nếu certificate còn chưa đầy 30 ngày nữa là hết hạn, nên có thể an toàn để tạo một công việc cron chạy hàng tuần hoặc thậm chí hàng ngày.

Tài liệu chính thức của Certbot khuyên bạn nên chạy cron hai lần mỗi ngày. Điều này sẽ đảm bảo , trong trường hợp Let's Encrypt bắt đầu thu hồi certificate , sẽ không có quá nửa ngày trước khi Certbot gia hạn certificate của bạn.

Chỉnh sửa crontab để tạo một công việc mới sẽ chạy gia hạn hai lần mỗi ngày. Để chỉnh sửa crontab cho user root , hãy chạy:

  • sudo crontab -e

Trình soạn thảo văn bản của bạn sẽ mở crontab mặc định là file văn bản trống tại thời điểm này. Hướng dẫn này sẽ sử dụng editor vi. Để tìm hiểu thêm về editor này và vim kế nhiệm của nó, hãy xem hướng dẫn Cài đặt và Sử dụng Trình soạn thảo Văn bản Vim trên Server cloud của ta .

Vào chế độ insert bằng cách nhấn i và thêm vào dòng sau:

crontab
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

Khi bạn hoàn tất, nhấn ESC để thoát khỏi chế độ insert , sau đó :wqENTER để lưu và thoát khỏi file . Điều này sẽ tạo ra một công việc cron mới sẽ thực thi vào buổi trưa và nửa đêm mỗi ngày. Thêm một yếu tố ngẫu nhiên vào công việc cron của bạn sẽ đảm bảo tất cả các công việc hàng giờ không xảy ra cùng một phút, gây ra sự tăng đột biến của server ; python -c 'import random; import time; time.sleep(random.random() * 3600)' sẽ chọn một phút ngẫu nhiên trong giờ cho các nhiệm vụ gia hạn của bạn.

Để biết thêm thông tin về cách tạo và lập lịch công việc cron, bạn có thể xem Cách sử dụng Cron để tự động hóa công việc trong hướng dẫn VPS . Thông tin chi tiết hơn về gia hạn có thể được tìm thấy trong tài liệu Certbot .

Kết luận

Trong hướng dẫn này, bạn đã cài đặt ứng dụng Let's Encrypt Certbot, download certificate SSL cho domain của bạn và cài đặt gia hạn certificate tự động. Nếu bạn có câu hỏi nào về việc sử dụng Certbot, bạn có thể kiểm tra tài liệu Certbot chính thức. Ta cũng khuyên bạn nên kiểm tra blog Let's Encrypt chính thức để biết các cập nhật quan trọng theo thời gian.


Tags:

Các tin liên quan

Cách cài đặt Apache Kafka trên Ubuntu 18.04
2019-05-10
Cách cài đặt Apache Kafka trên Debian 9
2019-05-10
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên Debian 9
2019-03-28
Cách cài đặt Apache Kafka trên CentOS 7
2019-03-27
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên CentOS 7
2019-03-25
Cách cài đặt và cấu hình Apache ZooKeeper Cluster trên Ubuntu 18.04
2019-01-03
Cách backup, nhập và di chuyển dữ liệu Apache Kafka của bạn trên Ubuntu 18.04
2018-12-20
Cách tạo chứng chỉ SSL tự ký cho Apache trong Debian 9
2018-09-07
Cách viết lại URL bằng mod_rewrite cho Apache trên Debian 9
2018-09-07
Cách cài đặt web server Apache trên Debian 9
2018-09-05