Bật HTTPS trên máy chủ của bạn

Chris Palmer
Chris Palmer

Trang này cung cấp hướng dẫn để thiết lập HTTPS trên máy chủ của bạn, bao gồm các bước sau:

  • Tạo cặp khoá công khai/riêng tư RSA 2048 bit.
  • Tạo yêu cầu ký chứng chỉ (CSR) nhúng khoá công khai của bạn.
  • Chia sẻ CSR với Tổ chức phát hành chứng chỉ (CA) để nhận được thông tin cuối cùng chứng chỉ hoặc chuỗi chứng chỉ.
  • Cài đặt chứng chỉ cuối cùng của bạn ở một nơi không thể truy cập vào web, chẳng hạn như /etc/ssl (Linux và Unix) hoặc bất cứ nơi nào IIS yêu cầu (Windows).

Tạo khoá và yêu cầu ký chứng chỉ

Phần này sử dụng chương trình dòng lệnh openssl, chương trình đi kèm với hầu hết Hệ thống Linux, BSD và Mac OS X để tạo khoá riêng tư, khoá công khai và CSR.

Tạo một cặp khoá công khai/riêng tư

Để bắt đầu, hãy tạo một cặp khoá RSA 2.048 bit. Một khoá ngắn hơn có thể bị hỏng và các khoá dài hơn sử dụng tài nguyên không cần thiết.

Sử dụng lệnh sau để tạo một cặp khoá RSA:

openssl genrsa -out www.example.com.key 2048

Thao tác này sẽ cho ra kết quả sau:

Generating RSA private key, 2048 bit long modulus
.+++
.......................................................................................+++
e is 65537 (0x10001)

Tạo yêu cầu ký chứng chỉ

Ở bước này, bạn nhúng khoá công khai và thông tin về tổ chức của mình và trang web của bạn thành yêu cầu ký chứng chỉ hoặc CSR. openssl yêu cầu bạn cung cấp siêu dữ liệu cần thiết.

Chạy lệnh sau:

openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr

Kết quả như sau:

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]:CA
State or Province Name (full name) [Some-State]:California
Locality Name (for example, city) []:Mountain View
Organization Name (for example, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (for example, section) []:Webmaster Help Center Example
Team
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:webmaster@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Để đảm bảo tính hợp lệ của CSR, hãy chạy lệnh sau:

openssl req -text -in www.example.com.csr -noout

Phản hồi sẽ có dạng như sau:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CA, ST=California, L=Mountain View, O=Google, Inc.,
OU=Webmaster Help Center Example Team,
CN=www.example.com/emailAddress=webmaster@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:
                    f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:
                    ...
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:
         2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:
         ...

Gửi CSR của bạn đến tổ chức phát hành chứng chỉ

Các tổ chức phát hành chứng chỉ (CA) khác nhau yêu cầu bạn gửi CSR của mình tới họ theo những cách khác nhau. Họ có thể sử dụng biểu mẫu trên trang web hoặc gửi CSR qua email. Một số CA hoặc đại lý của những CA đó, thậm chí có thể tự động hoá một số hoặc tất cả của quá trình, bao gồm, trong một số trường hợp, cặp khoá và tạo CSR.

Gửi CSR đến CA của bạn và làm theo hướng dẫn của họ để nhận chứng chỉ hoặc chuỗi chứng chỉ.

Các CA khác nhau tính số tiền khác nhau cho dịch vụ bảo lãnh cho khoá công khai của bạn.

Ngoài ra, còn có một số cách để ánh xạ khoá của bạn với nhiều tên DNS, bao gồm một số tên riêng biệt (ví dụ: tất cả example.com, www.example.com, example.net, và www.example.net) hoặc "wildcard" chẳng hạn như *.example.com.

Sao chép chứng chỉ vào tất cả máy chủ giao diện người dùng của bạn bằng một trình duyệt không thể truy cập như /etc/ssl (Linux và Unix) hoặc bất cứ nơi nào IIS (Windows) yêu cầu chúng.

Bật HTTPS trên máy chủ của bạn

Bật HTTPS trên máy chủ của bạn là một bước quan trọng trong việc cung cấp tính bảo mật cho trang web của bạn.

  • Sử dụng công cụ Cấu hình máy chủ của Mozilla để thiết lập máy chủ của bạn cho HTTPS của Google.
  • Thường xuyên kiểm tra trang web của bạn bằng Qualys Kiểm tra máy chủ SSL và đảm bảo bạn sẽ nhận được ít nhất A hoặc A+.

Tại thời điểm này, bạn phải đưa ra một quyết định hoạt động quan trọng. Chọn một trong sau:

  • Dành riêng một địa chỉ IP cho mỗi tên máy chủ mà máy chủ web của bạn phân phát nội dung .
  • Sử dụng dịch vụ lưu trữ ảo theo tên.

Nếu đang sử dụng địa chỉ IP riêng biệt cho mỗi tên máy chủ, bạn có thể hỗ trợ cả HTTP và HTTPS cho tất cả ứng dụng. Tuy nhiên, hầu hết các nhà điều hành trang web đều sử dụng phương pháp dựa trên tên lưu trữ ảo để bảo toàn địa chỉ IP và vì tính năng này thuận tiện hơn trong việc chung.

Nếu máy chủ của bạn chưa có dịch vụ HTTPS, hãy bật dịch vụ này ngay (mà không chuyển hướng từ HTTP sang HTTPS. Hãy xem bài viết Chuyển hướng HTTP sang HTTPS để biết thêm thông tin). Định cấu hình máy chủ web của bạn để sử dụng các chứng chỉ mà bạn mua và cài đặt. Bạn có thể tìm thấy cấu hình của Mozilla công cụ tạo hữu ích.

Nếu bạn có nhiều tên máy chủ hoặc miền con, mỗi tên máy chủ hoặc miền con cần phải sử dụng đúng chứng chỉ.

Bây giờ và thường xuyên trong suốt thời gian hoạt động của trang web, hãy kiểm tra HTTPS bằng Qualys' Kiểm tra máy chủ SSL. Trang web của bạn phải đạt điểm A hoặc A+. Coi mọi nội dung khiến điểm thấp là lỗi và luôn cần mẫn vì những cuộc tấn công mới nhắm vào thuật toán và giao thức luôn được phát triển.

Đặt các URL trong trang web là tương đối

Giờ đây, khi bạn đang phân phối trang web của mình trên cả HTTP và HTTPS, mọi thứ cần phải hoạt động như suôn sẻ nhất có thể bất kể giao thức là gì. Một yếu tố quan trọng là sử dụng URL tương đối cho liên kết nội bộ.

Hãy đảm bảo URL trong trang và URL bên ngoài không phụ thuộc vào một giao thức cụ thể. Hãy sử dụng các đường dẫn tương đối hoặc bỏ qua giao thức như trong //example.com/something.js.

Phân phát một trang chứa tài nguyên HTTP bằng HTTPS có thể gây ra vấn đề. Khi trình duyệt gặp một trang an toàn khác bằng cách sử dụng các tài nguyên không an toàn, công cụ sẽ cảnh báo người dùng rằng trang đó không hoàn toàn an toàn và một số trình duyệt từ chối tải hoặc thực thi HTTP làm hỏng trang. Tuy nhiên, bạn có thể sử dụng HTTPS một cách an toàn trên một trang HTTP. Để được hướng dẫn thêm về cách khắc phục các vấn đề này, hãy xem Khắc phục nội dung hỗn hợp.

Việc truy cập vào các đường liên kết dựa trên HTTP tới những trang khác trên trang web của bạn cũng có thể hạ cấp trải nghiệm người dùng từ HTTPS sang HTTP. Để khắc phục vấn đề này, hãy đặt URL trong trang web của bạn dưới dạng tương đối nhất có thể, bằng cách làm cho chúng mang tính tương đối (thiếu giao thức, bắt đầu bằng //example.com) hoặc máy chủ tương đối (bắt đầu bằng chỉ đường dẫn, chẳng hạn như /jquery.js).

Nên
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
Sử dụng URL nội bộ tương đối.
Nên
<h1>Welcome To Example.com</h1>
<script src="//example.com/jquery.js"></script>
<link rel="stylesheet" href="//assets.example.com/style.css"/>
<img src="//img.example.com/logo.png"/>;
<p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p>
Hoặc sử dụng URL trong trang web tương đối giao thức.
Nên
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
<p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p>
Sử dụng URL loại HTTPS cho đường liên kết đến các trang web khác (nếu có thể).

Hãy cập nhật các đường liên kết của bạn bằng một tập lệnh (chứ không phải thủ công) để tránh mắc lỗi. Nếu nội dung trang web nằm trong cơ sở dữ liệu, hãy kiểm tra tập lệnh của bạn trên bản sao phát triển của cơ sở dữ liệu. Nếu nội dung trang web của bạn chỉ bao gồm các tệp đơn giản, hãy kiểm tra tập lệnh của bạn cho bản sao đang phát triển của các tệp. Chỉ đưa các thay đổi vào giai đoạn sản xuất sau các thay đổi vượt qua quy trình đảm bảo chất lượng, như bình thường. Bạn có thể sử dụng tập lệnh của Bram van Damme hoặc thứ gì đó tương tự để phát hiện nội dung hỗn hợp trong trang web của bạn.

Khi liên kết đến các trang web khác (thay vì bao gồm các tài nguyên từ các trang web đó), đừng thay đổi giao thức. Bạn không có quyền kiểm soát cách hoạt động của các trang web đó.

Để quá trình di chuyển trên các trang web lớn diễn ra suôn sẻ hơn, bạn nên sử dụng các URL liên quan đến giao thức. Nếu bạn không chắc mình có thể triển khai đầy đủ HTTPS hay không, hãy buộc trang web của bạn sử dụng HTTPS đối với tất cả các tài nguyên phụ có thể phản tác dụng. Có thể sẽ có một khoảng thời gian thời điểm mà HTTPS còn mới mẻ và lạ lẫm đối với bạn, đồng thời trang web HTTP vẫn phải hoạt động hơn bao giờ hết. Sau một thời gian, bạn sẽ hoàn tất quá trình di chuyển và khoá trong HTTPS (xem hai phần tiếp theo).

Nếu trang web của bạn phụ thuộc vào tập lệnh, hình ảnh hoặc các tài nguyên khác do bên thứ ba, chẳng hạn như CDN hoặc jquery.com, bạn có hai lựa chọn:

  • Hãy sử dụng URL liên quan đến giao thức cho các tài nguyên này. Nếu bên thứ ba không phân phát HTTPS. Hầu hết đã làm được điều đó, bao gồm cả jquery.com.
  • Phân phát tài nguyên từ máy chủ mà bạn kiểm soát, máy chủ này cung cấp cả HTTP và HTTPS. Dù sao thì đây thường là ý tưởng hay vì sau đó bạn sẽ có kiểm soát giao diện, hiệu suất và tính bảo mật của trang web cũng như không để tin tưởng một bên thứ ba nhằm đảm bảo an toàn cho trang web của bạn.

Chuyển hướng từ HTTP sang HTTPS

Để cho các công cụ tìm kiếm sử dụng HTTPS để truy cập vào trang web của bạn, hãy đặt một đường liên kết chính tắc đầu mỗi trang bằng cách sử dụng thẻ <link rel="canonical" href="https://…"/>.

Bật chế độ Strict Transport Security và cookie bảo mật

Lúc này, bạn đã sẵn sàng "khoá" việc sử dụng HTTPS:

  • Sử dụng HTTP Strict Transport Security (HSTS) để tránh chi phí 301 chuyển hướng.
  • Luôn đặt cờ Bảo mật trên cookie.

Trước tiên, hãy sử dụng Strict Transport Security để cho khách hàng biết rằng họ phải luôn kết nối với máy chủ của bạn bằng HTTPS, kể cả khi theo dõi một tệp tham chiếu http://. Điều này đánh bại các cuộc tấn công như Xoá SSL, và tránh chi phí trọn vòng của 301 redirect mà chúng ta đã bật Chuyển hướng từ HTTP sang HTTPS.

Để bật HSTS, hãy đặt tiêu đề Strict-Transport-Security. Trang HSTS của OWASP có đường liên kết đến hướng dẫn cho nhiều loại phần mềm máy chủ.

Hầu hết các máy chủ web đều có khả năng thêm tiêu đề tuỳ chỉnh tương tự.

Điều cũng quan trọng là đảm bảo khách hàng không bao giờ gửi cookie (chẳng hạn như hoặc tuỳ chọn trang web) qua HTTP. Ví dụ: nếu người dùng cookie xác thực đã được tiết lộ dưới dạng văn bản thuần tuý, thì đảm bảo bảo mật trong toàn bộ phiên của họ sẽ bị huỷ, ngay cả khi bạn đã làm mọi việc khác đúng!

Để tránh điều này, hãy thay đổi ứng dụng web của bạn để luôn đặt cờ Bảo mật trên cookie bộ. Trang OWASP này giải thích cách đặt cờ Bảo mật trong nhiều khung ứng dụng. Mỗi khung ứng dụng đều có cách đặt cờ.

Hầu hết các máy chủ web đều cung cấp tính năng chuyển hướng đơn giản. Sử dụng 301 (Moved Permanently) để cho các công cụ tìm kiếm và trình duyệt biết rằng phiên bản HTTPS là phiên bản chuẩn, và chuyển hướng người dùng đến phiên bản HTTPS của trang web của bạn từ HTTP.

Thứ hạng tìm kiếm

Google sử dụng HTTPS làm kết quả tìm kiếm có chất lượng tích cực chỉ báo. Google cũng xuất bản hướng dẫn về cách chuyển, di chuyển hoặc di chuyển site trong khi duy trì thứ hạng tìm kiếm của nó. Bing cũng xuất bản các nguyên tắc cho webmasters (Quản trị trang web).

Hiệu suất

Khi các lớp nội dung và lớp ứng dụng được tinh chỉnh (tham khảo của Steve Souders sách để được tư vấn), thì TLS còn lại mối lo ngại về hiệu suất thường nhỏ so với chi phí chung của . Bạn cũng có thể giảm và khấu hao các chi phí đó. Để được tư vấn về TLS tối ưu hóa, hãy xem phần Kết nối mạng cho trình duyệt hiệu suất cao bằng Ilya Grigorik, cũng như Ivan Ristic Sổ tay nấu ăn OpenSSLBảo mật tầng truyền tải và giao thức bảo mật tầng truyền tải (TLS).

Trong một số trường hợp, TLS có thể cải thiện hiệu suất, chủ yếu là nhờ thực hiện HTTP/2. Để biết thêm thông tin, hãy tham khảo Chris Palmer's' về hiệu suất HTTPS và HTTP/2 tại Hội nghị Nhà phát triển Chrome năm 2014.

Tiêu đề tham chiếu

Khi người dùng truy cập đường liên kết từ trang web HTTPS của bạn đến các trang web HTTP khác, tác nhân người dùng không gửi tiêu đề Tham chiếu. Nếu đây là vấn đề, có một số cách để giải bài tập:

Doanh thu quảng cáo

Những nhà điều hành trang web kiếm tiền từ trang web của họ bằng cách hiển thị quảng cáo muốn đảm bảo rằng việc di chuyển sang HTTPS không làm giảm số lần hiển thị quảng cáo. Tuy nhiên, vì tính chất hỗn hợp các vấn đề về bảo mật nội dung, HTTP <iframe> không hoạt động trên trang HTTPS. Cho đến khi các nhà quảng cáo xuất bản qua HTTPS, nhà điều hành trang web không thể di chuyển sang HTTPS mà không mất doanh thu từ quảng cáo; nhưng cho đến khi nhà điều hành trang web di chuyển sang HTTPS, các nhà quảng cáo có ít động lực để xuất bản HTTPS.

Bạn có thể bắt đầu quá trình phá vỡ trạng thái bế tắc này bằng cách sử dụng các nhà quảng cáo cung cấp dịch vụ quảng cáo qua HTTPS và yêu cầu nhà quảng cáo không phân phát HTTPS tại tất cả để ít nhất hãy biến đó thành một lựa chọn. Bạn có thể cần hoãn việc hoàn thành Thiết lập các URL trong trang web nội bộ cho đến khi đủ nhà quảng cáo tương tác đúng cách.