Cài đặt SSL (HTTPS) cho website chạy Nginx, Apache và cPanel

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.

Cài đặt SSL cho website

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.

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 CSRPrivate 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.

SSL Namecheap

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.crtsitecuatui_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.crtsitecuatui_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.crtsitecuatui_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 CAIntermediate 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:

  1. Đăng nhập vào cPanel.
  2. Truy cập vào mục SSL/TLS Manager hoặc SSL/TLS. Chọn Manage SSL Sites ở mục tiếp theo.
  3. Ở mục Domain, hãy chọn tên miền mà bạn muốn cài đặt SSL.
  4. Sử dụng Notepad++ để mở các tệp tin tương ứng và nhập nội dung vào các ô sau:
    Cài đặt SSL cho cPanel
    • Certificate: (CRT)sitecuatui_com.crt
    • Private Key (KEY)sitecuatui.com.key.
    • Certificate Authority Bundle: (CABUNDLE)sitecuatui_com.ca-bundle
  5. Nhấn Install Certificate để cài đặt SSL.
  6. 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.