Quá trình tạo chứng chỉ SSL/TLS là tác vụ phổ biến đối với nhiều quản trị viên hệ thống Linux. May mắn thay, ngay cả bạn không phải quản trị viên, cũng dễ dàng làm bằng OpenSSL - công cụ mã nguồn mở cài sẵn mặc định trên nhiều bản phân phối Linux. Bài viết giải thích OpenSSL là gì, cách cài đặt, và quan trọng nhất, cách dùng nó tạo chứng chỉ SSL và TLS trên hệ thống.
OpenSSL là gì?
OpenSSL là thư viện do Dự án OpenSSL phát triển cung cấp triển khai SSL và TLS mã nguồn mở cho mã hóa lưu lượng mạng. Nó sẵn sàng cho nhiều bản phân phối Unix và dùng để tạo chứng chỉ, khóa riêng RSA, và thực hiện tác vụ mật mã học chung.
Hạn chế của chứng chỉ SSL tự ký (Self-Signed)
Khi dùng OpenSSL tạo chứng chỉ SSL, nó được coi là "tự ký" (self-signed). Nghĩa là chứng chỉ SSL được ký bằng khóa riêng của chính nó, không phải từ Certificate Authority (CA).
Do đó, chứng chỉ SSL không được "tin cậy" và không nên dùng cho bất kỳ trang web công khai nào. Nếu dùng, người dùng sẽ thấy cảnh báo từ trình duyệt về chứng chỉ.
Chứng chỉ tự ký hữu ích cho phát triển cục bộ hoặc ứng dụng chạy nền không đối mặt Internet.
Thay vào đó, bạn có thể dùng Let's Encrypt hoặc lấy chứng chỉ được xác thực bởi cơ quan uy tín như Comodo CA.
Cài đặt
Hầu hết bản phân phối Linux đã có phiên bản OpenSSL tích hợp sẵn mặc định. Nếu không, dễ dàng cài đặt.
Cài trên Ubuntu và Debian bằng lệnh apt:
sudo apt install openssl
Trên CentOS (hoặc thay thế), cài bằng lệnh yum:
sudo yum install openssl
Cũng dễ dàng tải từ trang web dưới dạng file ".tar.gz".
Cách dùng cơ bản
Đã có OpenSSL, xem một số hàm cơ bản chương trình cung cấp.
Bắt đầu bằng xem phiên bản và thông tin khác về cài đặt OpenSSL:
openssl version -a
Xem hướng dẫn cung cấp:
openssl help
Tạo chứng chỉ dùng file cấu hình
Tạo chứng chỉ dùng OpenSSL có nhiều cách. Một trong số đó là dùng file cấu hình chỉ định chi tiết về tổ chức.
Để bắt đầu, tạo file cấu hình tên "config.conf" và chỉnh sửa bằng Nano:
sudo nano example.conf
Dưới đây là ví dụ nội dung file cấu hình:
[req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext x509_extensions= v3_ca distinguished_name = dn [dn] C = US ST = California L = Los Angeles O = Org OU = Sales emailAddress = test@test.com CN = www.org.test.com [ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always basicConstraints = CA:true [req_ext] subjectAltName = @alt_names [alt_names] DNS.1 = test.example.com
Bạn chỉ cần sao chép dán vào file và thay đổi cần thiết phản ánh thông tin tổ chức của bạn.
Tiếp theo, tạo khóa riêng RSA, dùng để tạo chứng chỉ gốc:
openssl genrsa -out example.key 2048
Cờ -out chỉ định tên khóa sẽ tạo. Kích thước khóa 2048 bit cũng được chỉ định, đây là mặc định cho khóa RSA.
Cũng phải tạo Yêu cầu ký chứng chỉ (CSR - Certificate Signing Request):
openssl req -new -key example.key -out example.csr -config example.conf
Ở đây, cờ -key chỉ định khóa RSA, cờ -out chỉ định tên file CSR và cờ -config chỉ định tên file cấu hình.
Sau đó, tạo chứng chỉ gốc, dùng để tạo chứng chỉ cuối cùng:
openssl req -x509 -sha256 -nodes -new -key example.key -out example.crt -config example.conf
Trong quá trình tạo chứng chỉ gốc, cờ -sha256 chỉ định SHA256 làm message digest.
Bước cuối, gõ lệnh sau để tạo chứng chỉ:
openssl x509 -sha256 -CAcreateserial -req -days 30 -in example.csr -extfile example.conf -CA example.crt -CAkey example.key -out final.crt
Cờ -CA chỉ định chứng chỉ gốc, cờ -CAkey chỉ định khóa riêng và -extfile chỉ định tên file cấu hình. File "final.crt" sẽ là chứng chỉ SSL bạn muốn.
Tạo chứng chỉ không dùng file cấu hình
Thay vào đó, bạn cũng tạo chứng chỉ dùng OpenSSL không cần file cấu hình.
Bắt đầu bằng tạo khóa riêng RSA:
openssl genrsa -out example.key 2048
Tiếp theo, tạo CSR:
openssl req -new -key example.key -out example.csr
Khi tạo CSR, bạn sẽ được nhắc trả lời câu hỏi về tổ chức.
Cuối cùng, tạo chính chứng chỉ:
openssl x509 -req -days 30 -in example.csr -signkey example.key -out example.crt
Xác minh khóa và chứng chỉ
Khóa và chứng chỉ dễ dàng kiểm tra và xác minh bằng OpenSSL, với cờ -check:
openssl rsa -check -in example.key
Kiểm tra yêu cầu ký chứng chỉ:
openssl req -text -noout -in example.csr
Và chứng chỉ:
openssl x509 -text -noout -in example.crt
Câu hỏi thường gặp
1. Vẫn phải lo ngại Heartbleed không?
Heartbleed (CVE-2014-0160) là lỗ hổng cũ tìm thấy trong OpenSSL năm 2014. Cả TLS-servers và clients chạy OpenSSL đều bị ảnh hưởng. Bản vá phát hành vài ngày sau khi phát hiện, và lỗ hổng này không đáng lo ngại năm 2022 miễn là bạn chạy phiên bản OpenSSL hiện đại và cập nhật.
Nếu dùng OpenSSL trên hệ thống Debian và Ubuntu-based, luôn cập nhật bằng lệnh:
sudo apt update && sudo apt upgrade openssl
2. Chứng chỉ SSL tồn tại bao lâu trước khi hết hạn?
Điều này phụ thuộc giá trị bạn chọn khi tạo chứng chỉ. Có thể chỉ định bằng cờ -days khi tạo chứng chỉ.