Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

Cách tạo chứng chỉ SSL trên Linux dùng OpenSSL

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