Trang chủ » Web Server » Cài đặt SSL (HTTPS) cho website chạy Nginx, Apache và cPanel
Cài đặt SSL (HTTPS) cho website sẽ giúp bảo mật dữ liệu giữa người dùng và máy chủ. Trang web được cài đặt SSL sẽ tăng mức độ uy tín cho người truy cập. Google cũng công bố rằng thứ hạng của các trang web sẽ được cải thiện khi sử dụng HTTPS.
Google Chrome đã ưu ái cho các website sử dụng HTTPS bằng cách hiển thị rất rõ ràng cho người dùng biết rằng trang web này là Bảo mật. Điều này chắc chắn tạo ra sự tin cậy rất lớn cho người truy cập. Ngược lại, một số trang web và tất ca không cài đặt HTTPS đã bị Google Chrome hiển thị là Không bảo mật. Hiện tại trên trình duyệt Google Chrome phiên bản 68, toàn bộ các trang web không cài đặt HTTPS đã hiển thị là Không bảo mật. Vì vậy, nếu bạn không muốn người dùng tin tưởng trang web của bạn, bạn không cần phải cài đặt HTTPS.
Trong khi có nhiều lợi ích mà SSL sẽ mang lại cho trang web của bạn, việc cài đặt SSL cũng rất đơn giản. Hầu hết các web server đều hỗ trợ để cài đặt chứng chỉ SSL. Tại sao không chuyển từ HTTP sang HTTPS?
Hiện này có nhiều nhà cung cấp chứng chỉ SSL như Comodo, DigiCert… Cũng có các nhà cung cấp cho phép bạn đăng ký SSL miễn phí như Let’s Encrypt. Và một số dịch vụ cung cấp chứng chỉ SSL miễn phí như CloudFlare, xem hướng dẫn cài SSL free của Cloudflare cho website WordPress… Site của tui hiện đang sử dụng Comodo PositiveSSL, đây là loại SSL có chất lượng và giá cả phù hợp với trang web của tôi. Trong bài viết này, tôi sẽ giới thiệu về cách cài đặt Comodo PositiveSSL cho Nginx, Apache và cPanel chỉ qua vài bước đơn giản.
Tóm Tắt
SSL là gì?
SSL (Secure Sockets Layer) là một công nghệ bảo mật tiêu chuẩn cho việc thiết lập một liên kết được mã hóa giữa máy chủ và máy khách – thường là một máy chủ web (trang web) và một trình duyệt, hoặc một máy chủ mail và mail client (ví dụ, Outlook).
SSL cho phép các thông tin nhạy cảm như số thẻ tín dụng, số an sinh xã hội, và thông tin đăng nhập được truyền đi một cách an toàn. Thông thường, dữ liệu được gửi giữa các trình duyệt và máy chủ web được gửi ở văn bản minh bạch – để lại cho bạn dễ bị nghe trộm. Nếu kẻ tấn công có thể chặn tất cả các dữ liệu được gửi giữa trình duyệt và máy chủ web, họ có thể nhìn thấy và sử dụng thông tin đó.
Cụ thể hơn, SSL là một giao thức bảo mật. Giao thức mô tả cách các thuật toán được sử dụng. Trong trường hợp này, giao thức SSL xác định các biến của các mã hóa cho cả các liên kết và các dữ liệu được truyền đi.
SSL chỉ đảm bảo an toàn cho dữ liệu được truyền giữa máy chủ và máy khách. SSL hoàn toàn không giúp bảo mật máy chủ của bạn.
Tạo CSR và Private Key
Để ký một giấy chứng nhận SSL bạn cần phải gửi một CSR (Certificate Signing Request) đến nhà cung cấp chứng chỉ SSL. CSR là một khối mã với thông tin được mã hóa về công ty của bạn và tên miền.
Để tạo CSR và Private Key, sử dụng lệnh sau:
openssl req -new -newkey rsa:2048 -nodes -keyout sitecuatui.com.key -out sitecuatui.com.csr
Lệnh trên sử dụng OpenSSL để tạo CSR và Private key. Bạn cần thay thế sitecuatui.com thành tên miền của bạn để dễ phân biệt.
Kết quả xuất ra:
Generating a 2048 bit RSA private key ..................................+++ ............................+++ writing new private key to 'sitecuatui.com.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:VN string is too long, it needs to be less than 2 bytes long Country Name (2 letter code) [AU]:VN State or Province Name (full name) [Some-State]:N/A Locality Name (eg, city) []:Ho Chi Minh Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:sitecuatui.com Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Ở kết quả trên, bạn thấy rằng tôi đã trả lời các mục sau đây:
- Country Name: VN
- State or Province Name: N/A
- Locality Name: Ho Chi Minh (tỉnh hoặc thành phố)
- Common Name: sitecuatui.com (tên miền của bạn)
- Email Address: [email protected]
Nếu bạn là công ty, bạn có thể điền tên Công ty ở mục Organization Name.
Common Name là gì? Common Name là tên miền mà bạn muốn sử dụng để đăng ký chứng chỉ SSL.
- Chứng chỉ SSL sẽ được sử dụng cho tên miền này ở không www và có www.
- Đối với SSL Wildcard, chứng chỉ SSL cũng được áp dụng cho toàn bộ các tên miền con (
*.sitecuatui.com
). Ví dụ: shop.sitecuatui.com, forum.sitecuatui.com…
CSR code
Sau khi đã có tệp CSR và Private key, bạn cần lấy mã CSR để gửi đến nhà cung cấp chứng chỉ SSL. Bạn có thể lấy mã CSR trong tệp sitecuatui.com.csr bằng cách sử dụng lệnh sau:
cat sitecuatui.com.csr
Kết quả xuất ra có dạng như sau:
-----BEGIN CERTIFICATE REQUEST----- MIIC2DCCAcACAQAwgZIxCzAJBgNVBAYTAlZOMQwwCgYDVQQIDANOL0ExFDASBgNV BAcMC0hvIENoaSBNaW5oMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBM dGQxFzAVBgNVBAMMDnNpdGVjdWF0dWkuY29tMSMwIQYJKoZIhvcNAQkBFhRlbWFp bEBzaXRlY3VhdHVpLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AMMXUg86m9ev/vxTMK0nIJpPa7h4UavKw/zqvs9QXTZJX/r84C9WzPbMsm97qSwx j3kW6q+hHDo7ipsfBKAUvp/zCWZBddkE4Cac/Hj4EW3fUKI+5a7kCUP1zdVGAwKV FFbXaJa5JffVmmiqaDdAfS9BGkrIyszKp+seEMk7DAnWtwryRI4v4f3XQvVZktam P9FZ3uiY2q4UDvyv/MrwAxgwvTlAySpdT8RoeV/FbioyLj6PSOFSZvtR1M3BZ8AC 4Cuy79JYU/u0X2qdGPbOxHCNAlwsgw2uXwf630LsaDknnaWCTKCWKUxqk89XtWkf Y7bcznArjm/YQphhOXWBWRUCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4IBAQBW+tow LOQ29EXtTHZTbzHGpguYww9s871M/WdS99FKpvujW6G3BWH2Flmhf6trZUz/Fz1R mZJlBJTJcriOv9ZEpO1iii0JH0T37EepUaPFdkG41fO1MHAmGN8QQ1VEvafCStJr ix7ErE8xNBInyDD8f9gf/YB/3d8XMCiXRZvuF+QW2tMOK0Yoe5ZmpLNDRlyxzKsI j5LtdXK03c4pqOAlqzongQlCcBPs4kslktiWJQ6bPHriuXrfL8NOpwyg+RhwOYGf O1JXEVZSNrQwDuGps7/6pp0iRTN4gySqLr/PRfvev36O5mkVrSGtUhAsdk7ef7cF kPCH2/fxzyY3UWrq -----END CERTIFICATE REQUEST-----
Đăng ký SSL
Sau khi đã có mã CSR, bạn cần gửi nó đến các nhà cung cấp chứng chỉ SSL. Ở đây, tôi sẽ đăng ký Comodo PositiveSSL tại Namecheap.
Sau khi đăng ký, để kích hoạt SSL tại Namecheap, bạn cần dán mã CSR vào mục Enter CSR để tiếp tục.
Namecheap sẽ yêu cầu bạn xác thực tên miền bằng cách xác thực email, tập tin TXT hoặc bảng ghi CNAME. Cách dễ dàng nhất là xác thực qua email, bạn chỉ cần nhấn vào liên kết trong email để xác nhận.
Sau khi đã đăng ký và kích hoạt SSL. Chứng chỉ và các tập tin cần thiết sẽ được đính kèm trong email.
Cài đặt SSL
Sau khi đã nhận được chứng chỉ SSL, bạn có thể cài đặt SSL chỉ với vài bước đơn giản. Ở đây, tôi chỉ hướng dẫn cài đặt SSL cho Nginx, Apache và cPanel. Đối với các webserver khác và các môi trường khác, vui lòng tham khảo ở đây.
Không có sự khác biệt giữa cách cài đặt SSL cho CentOS, Ubuntu hoặc bất cứ một máy chủ nào khác. Chỉ cần bạn biết nơi để chỉnh sửa cấu hình cho các webserver.
Trước đây, Comodo sẽ gửi 4 tệp tin là sitecuatui_com.crt
, COMODORSADomainValidationSecureServerCA.crt, COMODORSAAddTrustCA.crt và AddTrustExternalCARoot.crt. Bây giờ Comodo chỉ gửi 2 tệp tin là sitecuatui_com.crt
và sitecuatui_com.ca-bundle
.
Nếu các tệp tin mà bạn nhận được là COMODORSADomainValidationSecureServerCA.crt, COMODORSAAddTrustCA.crt và AddTrustExternalCARoot.crt, bạn cần hợp nhất chúng lại thành sitecuatui_com.ca-bundle
bằng lệnh sau:
cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >> sitecuatui_com.ca-bundle
Thay thế sitecuatui_com
bằng tên miền của bạn hoặc bất cứ gì bạn muốn. Bây giờ chúng ta sẽ có 2 tệp tin là sitecuatui_com.crt
và sitecuatui_com.ca-bundle
. Bạn cũng đừng quên di chuyển các tệp tin này đến một nơi thích hợp.
Chung
Để nhận được các cấu hình tốt nhất cho trường hợp của bạn, tôi khuyến nghị bạn nên sử dụng Mozilla SSL Configuration Generator. Nó hỗ trợ bạn cấu hình SSL cho nhiều loại web server, các phiên bản của OpenSSL và nhiều cấu hình khác.
Một số khái niệm chung:
- Modern (hiện đại), Intermediate (trung gian) và Old (cũ): cấu hình này sẽ quyết định các phiên bản của hệ điều hành và trình duyệt sẽ được hỗ trợ.
- Server Version: phiên bản của web server, như là phiên bản của Nginx, Apache, Lighttpd, HAProxy và AWS ELB…
- OpenSSL Version: phiên bản của OpenSSL. Nếu bạn đang sử dụng LibreSSL, có thể bạn nên lựa chọn phiên bản mới nhất.
- HSTS Enabled: trình duyệt sẽ tự động chuyển trang web của bạn sang HTTPS trong một thời gian quy định, mặc định là 6 tháng.
Nginx
Dưới đây là cấu hình SSL cho Nginx.
server { listen 443 ssl http2; listen [::]:443 ssl http2; # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate ssl_certificate /path/to/signed_cert_plus_intermediates; ssl_certificate_key /path/to/private_key; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits ssl_dhparam /path/to/dhparam.pem; # intermediate configuration. tweak to your needs. ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months) add_header Strict-Transport-Security max-age=15768000; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ## verify chain of trust of OCSP response using Root CA and Intermediate certs ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates; resolver <IP DNS resolver>; .... }
Một số giá trị cần thay đổi để phù hợp với trường hợp của bạn:
- ssl_certificate: đường dẫn đến tệp tin chứng chỉ. Đối với Nginx, bạn cần hợp nhất 2 tệp tin là
sitecuatui_com.crt
vàsitecuatui_com.ca-bundle
thành 1 tệp tin duy nhất. Bạn có thể sử dụng lệnh sau:cat sitecuatui_com.crt sitecuatui_com.ca-bundle >> sitecuatui_com_new.crt
- ssl_certificate_key: đường dẫn đến Private key, ở đây là tệp
sitecuatui.com.key
mà bạn đã tạo ở bước đầu tiên. - ssl_dhparam: chỉ định một tệp tin với các thông số DH cho mật mã DHE. Sử dụng lệnh sau:
openssl dhparam -out /path/to/dhparam.pem 2048
/path/to/dhparam.pem
là đường dẫn mà bạn muốn lưu tệp tin. - ssl_trusted_certificate: đường dẫn đến tệp tin mà tập tin này được hợp nhất bởi Root CA và Intermediate Certificates. Đối với Comodo, bạn có thể tải tệp tin này bằng lệnh sau:
wget https://gist.githubusercontent.com/sergejmueller/4b53e4c810f61aca391a/raw/f175a094122b91fdda8523a90ca6dc057d70b9f1/comodo.pem
- resolver: DNS. Ví dụ:
resolver 8.8.4.4 8.8.8.8;
- Nếu phiên bản Nginx và OpenSSL của bạn hỗ trợ TLS 1.3, bạn có thể bật giao thức này, xem thêm hướng dẫn về TLS 1.3.
Apache
Dưới đây là cấu hình SSL cho Apache. Bạn cần mở tập tin cấu hình Virtual Host của Apache để thêm và chỉnh sửa.
<VirtualHost *:443> ... SSLEngine on SSLCertificateFile /path/to/signed_certificate_followed_by_intermediate_certs SSLCertificateKeyFile /path/to/private/key # Uncomment the following directive when using client certificate authentication #SSLCACertificateFile /path/to/ca_certs_for_client_authentication # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ... </VirtualHost> # intermediate configuration, tweak to your needs SSLProtocol all -SSLv3 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS SSLHonorCipherOrder on SSLCompression off SSLSessionTickets off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000)
Một số giá trị cần thay đổi để phù hợp với trường hợp của bạn:
- SSLCertificateFile: đường dẫn đến tệp tin chứng chỉ, ở đây là
sitecuatui_com.crt
. - SSLCertificateKeyFile: đường dẫn đến Private key, ở đây là tệp
sitecuatui.com.key
mà bạn đã tạo ở bước đầu tiên. -
SSLCACertificateFile
: bỏ dấu # ở trước để bật tính năng này. Đây là đường dẫn đến tệp tin
sitecuatui_com.ca-bundle
.
cPanel
Việc cài đặt SSL cho cPanel rất đơn giản chỉ với một vài bước sau đây:
- Đăng nhập vào cPanel.
- Truy cập vào mục SSL/TLS Manager hoặc SSL/TLS. Chọn Manage SSL Sites ở mục tiếp theo.
- Ở mục Domain, hãy chọn tên miền mà bạn muốn cài đặt SSL.
- Sử dụng Notepad++ để mở các tệp tin tương ứng và nhập nội dung vào các ô sau:
- Certificate: (CRT):
sitecuatui_com.crt
- Private Key (KEY):
sitecuatui.com.key
. - Certificate Authority Bundle: (CABUNDLE):
sitecuatui_com.ca-bundle
- Certificate: (CRT):
- Nhấn Install Certificate để cài đặt SSL.
- Chứng chỉ SSL đã được cài đặt thành công nếu bạn nhận được thông báo SSL Host Successfully Installed.
Chuyển HTTP sang HTTPS
Để trang web luôn luôn sử dụng HTTPS, bạn cần phải cấu hình để máy chủ web tự động chuyển từ HTTP sang HTTPS. Nếu bạn đang sử dụng Cloudflare, bạn có thể chuyển hướng HTTP sang HTTPS trực tiếp qua Cloudflare. Điều này có thể được thực hiện bằng cách đơn giản dưới đây.
Đối với Nginx, mở nginx.conf
để thêm hoặc sửa lại như sau:
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; }
Mã trên sẽ được áp dụng cho toàn bộ các trang web đang có trên máy chủ. Nếu bạn chỉ muốn áp dụng đối với một hoặc một số trang web mà bạn muốn, sử dụng mã sau:
server { listen 80; listen [::]:80; server_name domain1.com www.domain1.com domain2.com www.domain2.com; return 301 https://$host$request_uri; }
Đối với Apache, mở tệp .htaccess
và thêm đoạn mã sau:
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Để cài đặt HTTPS cho WordPress, bạn cần phải sửa URL từ http sang https. Bạn cũng đừng quên thêm trang web có HTTPS vào trong Google Search Console nhé.
HSTS preload
HSTS là gì? HSTS (HTTP Strict Transport Security) là một cơ chế chính sách bảo mật web giúp bảo vệ các trang web chống lại các cuộc tấn công hạ cấp giao thức và Cookie cướp. Nó cho phép các máy chủ web để tuyên bố rằng trình duyệt web (hoặc tuân thủ các đại lý người dùng khác) nên chỉ tương tác với nó sử dụng an toàn HTTPS kết nối, và không bao giờ thông qua các giao thức HTTP không an toàn.
HSTS preload là gì? HSTS preload là danh sách các trang web chỉ được sử dụng HTTPS bởi Chrome. Hầu hết các trình duyệt cũng có thể có được danh sách này dựa trên Chrome. Khi bạn gửi tên miền của bạn vào danh sách này, trình duyệt sẽ bắt buộc trang web phải truy cập ở HTTPS.
Gửi tên miền của bạn vào danh sách HSTS preload ở đây.
Lời kết
Cài đặt SSL cho trang web có nhiều lợi ích như bảo mật, tăng thứ hạng, lấy được lòng tin của người dùng. Mặc dù SSL mang lại nhiều lợi ích nhưng nó cũng có thể là nguyên nhân làm tốc độ trang web chậm hơn. Hãy kiểm tra và thử nghiệm nó cho trường hợp của bạn. Nhưng đối với tôi, SSL làm cho trang web của tôi trở nên tốt đẹp.
Sau khi đã cài đặt SSL thành công, bạn có thể kiểm tra nó tại SSL Server Test.