Khi nhận thức của mọi người về bảo mật trực tuyến ngày càng tăng và các công ty Internet lớn thúc đẩy việc phổ biến HTTPS, HTTPS SSL về cơ bản đã trở thành tiêu chuẩn để xây dựng trang web. Nhờ các chứng chỉ SSL miễn phí do Let’s Encrypt, Digicert, TrustAsia, Symantec, v.v. cung cấp, chi phí sử dụng HTTPS giờ đây không đáng kể dù là website cá nhân hay website công ty.
Để bảo mật, chúng ta cần sử dụng HTTPS, nhưng việc bật SSL sẽ làm tăng mức sử dụng bộ nhớ, CPU và băng thông mạng. So với http, sử dụng bắt tay ba chiều TCP để thiết lập kết nối, máy khách và máy chủ cần trao đổi 3 gói. Ngoài ba gói TCP, https cũng cần 9 gói cần thiết cho bắt tay SSL, tổng cộng là 12 gói. gói. Vì vậy, nếu HTTPS được tối ưu hóa nhiều sẽ dễ dẫn đến hiệu suất chậm.
Tất nhiên, một số người có thể nghĩ rằng về cơ bản không cảm nhận được chi phí hoạt động tăng lên của máy chủ HTTPS và SSL. Điều này là do lưu lượng truy cập của trang web tương đối nhỏ và cấu hình hiệu suất của máy chủ đủ để hỗ trợ lưu lượng truy cập hiện tại. Nhưng đối với các trang web lớn, chẳng hạn như Baidu, Google và các ứng dụng phổ biến, việc tối ưu hóa hiệu suất HTTPS và giảm mức tiêu thụ tài nguyên vẫn rất hữu ích.
Bài viết này sẽ chia sẻ một số kinh nghiệm trong việc tối ưu hóa việc sử dụng HTTPS và SSL. Ngoài ra còn có thêm các bài hướng dẫn kinh nghiệm về chứng chỉ SSL và HTTPS:
- Thu thập và tóm tắt chứng chỉ SSL miễn phí - thêm quyền truy cập được mã hóa an toàn HTTPS vào trang web miễn phí
- Mười mẹo tăng tốc CDN miễn phí của CloudFlare mà bạn có thể không biết-SSLDDOSCache
- Kích hoạt HSTS và tham gia Danh sách tải trước HSTS để giúp truy cập HTTPS vào website an toàn hơn - với phương pháp xóa HSTS
PS: Cập nhật ngày 6 tháng 9 năm 2018, nếu bạn muốn sử dụng dịch vụ phân giải DNS trả phí thì đây là hai dịch vụ DNS rẻ hơn, phù hợp hơn với cá nhân: Hai sản phẩm DNS phù hợp cho mục đích sử dụng cá nhân: CloudDNS và DNS Việc phân giải tên miền được thực hiện dễ dàng.
PS: Cập nhật ngày 15 tháng 1 năm 2019, Nếu bạn muốn truy cập SSL để có tốc độ nhanh hơn và hiệu suất cao hơn, bạn có thể thử nén TLSV1.3 và Brotli: Tăng tốc tối ưu hóa trang web-bật TLSV1.3 và nén Brotli -Oneinstack, LNMP, bảng điều khiển chùa.
1. Làm thế nào để chọn chứng chỉ SSL miễn phí?
Nên chọn Let's Encrypt. Mặc dù chứng chỉ SSL miễn phí của Let’s Encrypt chỉ có thời hạn 90 ngày nhưng nó có thể được gia hạn vô thời hạn và hỗ trợ gia hạn thủ công và tự động. Let's Encrypt SSL được tất cả các trình duyệt chính công nhận và là lựa chọn hàng đầu cho chứng chỉ SSL miễn phí. Hướng dẫn: Let's Encrypt Wildcard chứng chỉ SSL tên miền miễn phí chỉ bằng một cú nhấp chuột và hướng dẫn sử dụng SSL.
Let’s Encrypt phù hợp với các máy chủ có IP độc lập như VPS, nếu không, bạn chỉ có thể sử dụng một số ứng dụng chứng chỉ SSL trực tuyến được phát triển bằng Let’s Encrypt API. Tất nhiên, nếu bạn có thế mạnh tài chính nhất định thì việc lựa chọn chứng chỉ SSL trả phí sẽ khả thi hơn.
2. Kích hoạt HSTS trên máy chủ
Các trang web sử dụng giao thức HSTS sẽ đảm bảo trình duyệt luôn kết nối với phiên bản HTTPS của trang web mà không yêu cầu người dùng nhập thủ công địa chỉ được mã hóa chứa https://
vào thanh địa chỉ URL. Tôi sử dụng máy chủ Nginx, tôi chỉ cần chỉnh sửa tệp cấu hình Nginx (chẳng hạn như: /usr/local/nginx/conf/nginx.conf) và thêm các dòng sau vào khối máy chủ của cấu hình HTTPS:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
Để biết chi tiết về cách bật HSTS cho Apache, Lighttpd, v.v., hãy xem: Bật HSTS trên máy chủ.
3. Thêm tên miền vào gói danh sách tải trước HSTS
Mặc dù giao thức HSTS được kích hoạt ở trên để đảm bảo người dùng luôn truy cập các kết nối Https nhưng nhìn chung người dùng truy cập trang web lần đầu sẽ có thói quen nhập tên miền không phải https, dẫn đến vấn đề http hijacking khi truy cập trang web lần đầu. thời gian. Kế hoạch danh sách tải trước HSTS là để giải quyết vấn đề này. Đây là danh sách tích hợp sẵn trong các trình duyệt như chromeFirefoxEdge.
Cách tham gia Danh sách tải trước HSTS: Kích hoạt HSTS và tham gia Danh sách tải trước HSTS để truy cập HTTPS vào website an toàn hơn - Kèm theo là phương pháp xóa HSTS. Hiện tại, wzfou.com đã được thêm thành công vào danh sách tải trước HSTS. Nếu bạn đang sử dụng Chrome hoặc Firefox, lần đầu tiên truy cập trang web này, bạn sẽ sử dụng HTTPS để kết nối theo mặc định.
Bật ghim OCSP trong Nginx. (ssl_trusted_certificate có thể được bỏ qua nếu lệnh ssl_certificate chỉ định chuỗi chứng chỉ hoàn chỉnh)
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/certs/chained.pem;
Bật tính năng dập ghim OCSP trong Apache:
Trong <VirtualHost></VirtualHost>
thêm:
SSLUseStapling on
Bên ngoài <VirtualHost></VirtualHost>
thêm:
SSLStaplingCache shmcb:/tmp/stapling_cache(128000)
5. Sử dụng chứng chỉ kép ECC và RSA
Theo mặc định, tất cả chúng ta sẽ sử dụng chứng chỉ RSA vì chứng chỉ RSA có khả năng tương thích rộng nhất. Tuy nhiên, chứng chỉ ECC có đặc điểm là kích thước nhỏ, tốc độ tính toán nhanh và độ bảo mật cao (256-bit ECC key
có thể cung cấp khả năng bảo mật tương tự như 3072-bit RSA key
) . Nó có thể cung cấp hiệu suất HTTPS ở một mức độ nhất định.
Let's Encrypt đã hỗ trợ tạo chứng chỉ ECC. Sử dụng acme.sh để cấp chứng chỉ SSL. Chỉ định --keylength ec-256
để thay đổi loại chứng chỉ thành ECC:
acme.sh --issue -w /data/wwwroot/wzfou.com -d wzfou.com -d www.wzfou.com --keylength ec-256
Cần lưu ý rằng ECC không tương thích trên Windows XP lúc này chúng ta sẽ nghĩ đến việc sử dụng chứng chỉ kép tức là khi chứng chỉ ECC không được hỗ trợ, Nginx sẽ tự động hiển thị chứng chỉ RSA cho người dùng. Nếu phiên bản nginx lớn hơn 1.11
, bạn có thể ghi trực tiếp đường dẫn của chứng chỉ kép ECC và RSA vào tệp cấu hình wzfou.com như sau:
#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;
#RSA
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key;
Khởi động lại Nginx. Khi người dùng như XP không hỗ trợ chứng chỉ ECC truy cập trang web, chứng chỉ RSA sẽ được hiển thị.
Những người dùng khác thích sử dụng chứng chỉ ECC hơn.
Nếu bạn thấy rằng ECC không được ưu tiên hiển thị, hãy kiểm tra xem ssl_prefer_server_ciphers
có được bật hay không và liệu ssl_ciphers
có được định cấu hình đúng cách hay không. Sau đây là cấu hình được wzfou.com sử dụng:
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
Ngoài ra, bạn có thể chọn bất kỳ một trong ba tùy chọn sau (chỉ dành cho thử nghiệm):
ssl_ciphers 'EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5';
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_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';
6. Kích hoạt CAA DNS
Chức năng của DNS CAA là chỉ cho phép CA có tên trong bản ghi cấp chứng chỉ cho tên miền (hoặc tên miền phụ) để ngăn chặn ai đó giả mạo chứng chỉ SSL. Đồng thời, bản ghi CAA có thể kiểm soát việc cấp tên miền duy nhất. tên chứng chỉ SSL và cũng có thể kiểm soát chứng chỉ Wildcard. Để biết các phương pháp chi tiết, hãy xem: CAA cài đặt DNS của JD Cloud.
Sự cố:Bật DNS CAA dẫn đến lỗi: Xác minh lỗi: Bản ghi CAA cho *.wzfou.comngăn chặn việc phát hành. Giải pháp là thêm bản ghi issuewild
: 0 issuewild "letsencrypt.org"
. Ngoài ra, hai trang web được cung cấp để kiểm tra xem cấu hình CAA có chính xác hay không:
- HTTPS://CAA test.co.UK/
- HTTPS://Bạn bè đêm giao thừa.IO/labs/CAA-validator
7. Tự động cập nhật chứng chỉ SSL thường xuyên
Nếu bạn muốn cập nhật thủ công:
# RSA
$ acme.sh --renew -d wzfou.com –d www.wzfou.com --force
# ECC
acme.sh --renew -d wzfou.com –d www.wzfou.com --force --ecc
Nói chung, acme.sh đã tự động thêm các tác vụ theo lịch trình để cập nhật thường xuyên chứng chỉ Let's Encrypt. Nếu bạn thấy rằng chứng chỉ không được cập nhật thường xuyên, hãy kiểm tra xem tác vụ Cron của bạn có chính xác hay không. Bạn cũng có thể thử buộc cập nhật:
"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force
8. Kiểm tra cấu hình chứng chỉ SSL
Các trang web thử nghiệm thường được sử dụng bao gồm:
- HTTPS://wuwuwu.SSL labs.com/SSL test/analyze.HTML
- https://nokill.com/
Chúng tôi khuyên bạn nên sử dụng ssllabs.com. Kết quả kiểm tra vẫn rất chính xác, như sau:
9. Toàn diện
Dựa trên các chiến lược tối ưu hóa ở trên, việc tối ưu hóa cụ thể tệp cấu hình Nginx như sau:
server {
listen 443 ssl http2;
#使用HTTP/2,需要Nginx1.9.7以上版本
add_header Strict-Transport-Security "max-age=6307200; includeSubdomains; preload";
#开启HSTS,并设置有效期为“6307200秒”(6个月),包括子域名(根据情况可删掉),预加载到浏览器缓存(根据情况可删掉)
add_header X-Frame-Options DENY;
#禁止被嵌入框架
add_header X-Content-Type-Options nosniff;
#防止在IE9、Chrome和Safari中的MIME类型混淆攻击
ssl_certificate /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.crt;
ssl_certificate_key /usr/local/nginx/conf/vhost/sslkey/www.linpx.com.key;
#SSL证书文件位置
ssl_trusted_certificate /usr/local/nginx/conf/vhost/sslkey/chaine.pem;
#OCSP Stapling的证书位置
ssl_dhparam /usr/local/nginx/conf/vhost/sslkey/dhparam.pem;
#DH-Key交换密钥文件位置
#SSL优化配置
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#只允许TLS协议
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
#加密套件,这里用了CloudFlare's Internet facing SSL cipher configuration
ssl_prefer_server_ciphers on;
#由服务器协商最佳的加密算法
ssl_session_cache builtin:1000 shared:SSL:10m;
#Session Cache,将Session缓存到服务器,这可能会占用更多的服务器资源
ssl_session_tickets on;
#开启浏览器的Session Ticket缓存
ssl_session_timeout 10m;
#SSL session过期时间
ssl_stapling on;
#OCSP Stapling开启,OCSP是用于在线查询证书吊销情况的服务,使用OCSP Stapling能将证书有效状态的信息缓存到服务器,提高TLS握手速度
ssl_stapling_verify on;
#OCSP Stapling验证开启
resolver 8.8.8.8 8.8.4.4 valid=300s;
#用于查询OCSP服务器的DNS
resolver_timeout 5s;
#查询域名超时时间
···
}
Trong quá trình sử dụng thực tế, người ta nhận thấy rằng việc "tối ưu hóa" riêng lẻ phải được xác định theo nhu cầu của bản thân. Sau đây là cấu hình Nginx hiện được wzfou.com sử dụng, chỉ mang tính chất tham khảo:
listen 80;
listen 443 ssl http2;
#ECC
ssl_certificate /root/.acme.sh/wzfou.com_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/wzfou.com_ecc/wzfou.com.key;
#RSA
ssl_certificate /usr/local/nginx/conf/ssl/wzfou.com.crt;
ssl_certificate_key /usr/local/nginx/conf/ssl/wzfou.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_buffer_size 1400;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
ssl_stapling on;
ssl_stapling_verify on;
PS: Đã cập nhật vào ngày 5 tháng 8 năm 2018. Cảm ơn xiaoz đã nhắc nhở. Đây là trang web tạo cấu hình SSL trực tuyến, từ Mozilla, rất có thể tham khảo:
- https://Mozilla.GitHub.IO/server-dead-torres/rated-config-generator/