Table of Contents

No table of contents

Cách thiết lập và định cấu hình Certificate Authority (CA) trên Ubuntu 20.04

Posted on: 5 tháng 7 năm 2023

Ubuntu

Giới thiệu

Certificate Authority (CA) là một tổ chức chịu trách nhiệm cấp chứng chỉ kỹ thuật số để xác minh danh tính trên internet. Mặc dù CA công cộng (public CA) là lựa chọn phổ biến để xác minh danh tính của trang web và các dịch vụ khác được cung cấp cho công chúng, nhưng CA riêng (private CA) thường được sử dụng cho các nhóm kín và dịch vụ riêng.

Xây dựng Tổ chức phát hành chứng chỉ riêng (private Certificate Authority) sẽ cho phép bạn định cấu hình, kiểm tra và chạy các chương trình yêu cầu kết nối được mã hóa giữa máy khách và máy chủ. Với CA riêng, bạn có thể cấp chứng chỉ cho người dùng, máy chủ hoặc các chương trình và dịch vụ riêng lẻ trong cơ sở hạ tầng của mình.

Một số ví dụ về các chương trình trên Linux sử dụng CA riêng của chúng là OpenVPN và Puppet . Bạn cũng có thể định cấu hình máy chủ web của mình để sử dụng các chứng chỉ do CA riêng cấp nhằm làm cho môi trường phát triển và staging phù hợp với các máy chủ sản xuất sử dụng TLS để mã hóa kết nối.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách thiết lập Tổ chức phát hành chứng chỉ riêng trên máy chủ Ubuntu 20.04 cũng như cách tạo và ký chứng chỉ kiểm tra bằng CA mới của bạn. Bạn cũng sẽ tìm hiểu cách nhập chứng chỉ công khai của máy chủ CA vào kho lưu trữ chứng chỉ của hệ điều hành để bạn có thể xác minh chuỗi tin cậy giữa CA và máy chủ hoặc người dùng từ xa. Cuối cùng, bạn sẽ tìm hiểu cách thu hồi chứng chỉ và phân phối Danh sách Thu hồi Chứng chỉ (Certificate Revocation List) để đảm bảo chỉ những người dùng và hệ thống được ủy quyền mới có thể sử dụng các dịch vụ dựa trên CA của bạn.

Điều kiện tiên quyết

Để hoàn thành hướng dẫn này, bạn sẽ cần quyền truy cập vào máy chủ Ubuntu 20.04 để lưu trữ máy chủ CA của bạn. Bạn sẽ cần định cấu hình non-root user với đặc quyền sudo trước khi bắt đầu hướng dẫn này. Bạn có thể làm theo hướng dẫn thiết lập máy chủ ban đầu Ubuntu 20.04 của chúng tôi để thiết lập người dùng có quyền thích hợp. Hướng dẫn được liên kết cũng sẽ thiết lập tường lửa, tường lửa này được cho là có sẵn trong suốt hướng dẫn này.

Máy chủ này sẽ được gọi là Máy chủ CA trong hướng dẫn này.

Đảm bảo rằng Máy chủ CA là một hệ thống độc lập. Nó sẽ chỉ được sử dụng để nhập, ký và thu hồi các yêu cầu chứng chỉ. Nó không nên chạy bất kỳ dịch vụ nào khác và lý tưởng nhất là nó sẽ ngoại tuyến hoặc tắt hoàn toàn khi bạn không tích cực làm việc với CA của mình.

Lưu ý: Phần cuối cùng của hướng dẫn này là tùy chọn nếu bạn muốn tìm hiểu về cách ký và thu hồi chứng chỉ. Nếu bạn chọn hoàn thành các bước thực hành đó, bạn sẽ cần một máy chủ Ubuntu 20.04 thứ hai hoặc bạn cũng có thể sử dụng máy tính Linux cục bộ của riêng mình chạy Ubuntu hoặc Debian hoặc các bản phân phối có nguồn gốc từ một trong hai máy đó.

Bước 1 — Cài đặt Easy-RSA

Nhiệm vụ đầu tiên trong hướng dẫn này là cài đặt tập lệnh easy-rsa trên Máy chủ CA của bạn. easy-rsa là công cụ quản lý Tổ chức phát hành chứng chỉ mà bạn sẽ sử dụng để tạo khóa riêng và chứng chỉ gốc công khai, sau đó bạn sẽ sử dụng chứng chỉ này để ký các yêu cầu từ máy khách và máy chủ sẽ dựa vào CA của bạn.

Đăng nhập vào Máy chủ CA của bạn với tư cách là non-root sudo usermà bạn đã tạo trong các bước thiết lập ban đầu và chạy như sau:

  1. sudo apt update
  2. sudo apt install easy-rsa

Bạn sẽ được nhắc tải xuống gói và cài đặt nó. Nhấn y để xác nhận bạn muốn cài đặt gói.

Tại thời điểm này, bạn đã thiết lập mọi thứ cần thiết và sẵn sàng sử dụng Easy-RSA. Trong bước tiếp theo, bạn sẽ tạo Public Key Infrastructure (Cơ sở hạ tầng khóa công khai), sau đó bắt đầu xây dựng Tổ chức phát hành chứng chỉ của mình.

Bước 2 — Chuẩn bị thư mục Public Key Infrastructure

Bây giờ bạn đã cài đặt easy-rsa, đã đến lúc tạo một khung Cơ sở hạ tầng khóa công khai (Public Key Infrastructure - PKI) trên Máy chủ CA. Đảm bảo rằng bạn vẫn đăng nhập với tư cách là non-root sudo user của mình và tạo một thư mục easy-rsa. Đảm bảo rằng bạn không sử dụng sudo để chạy bất kỳ lệnh nào sau đây, vì người dùng bình thường của bạn sẽ quản lý và tương tác với CA mà không có đặc quyền nâng cao.

  1. mkdir ~/easy-rsa

Thao tác này sẽ tạo một thư mục mới có tên easy-rsa trong thư mục chính của bạn. Chúng tôi sẽ sử dụng thư mục này để tạo các liên kết tượng trưng trỏ đến các tệp gói easy-rsa mà chúng tôi đã cài đặt ở bước trước. Các tệp này nằm trong thư mục /usr/share/easy-rsa trên Máy chủ CA.

Tạo các liên kết tượng trưng bằng lệnh ln:

  1. ln -s /usr/share/easy-rsa/* ~/easy-rsa/

Lưu ý: Mặc dù các hướng dẫn khác có thể hướng dẫn bạn sao chép các tệp gói easy-rsa vào thư mục PKI của bạn, nhưng hướng dẫn này sử dụng phương pháp liên kết tượng trưng. Do đó, mọi cập nhật đối với gói easy-rsa sẽ tự động được phản ánh trong tập lệnh PKI của bạn.

Để hạn chế quyền truy cập vào thư mục PKI mới của bạn, hãy đảm bảo rằng chỉ chủ sở hữu mới có thể truy cập nó bằng lệnh chmod:

  1. chmod 700 /home/sammy/easy-rsa

Cuối cùng, khởi tạo PKI bên trong thư mục easy-rsa:

  1. cd ~/easy-rsa
  2. ./easyrsa init-pki
Output
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/sammy/easy-rsa/pki

Sau khi hoàn thành phần này, bạn có một thư mục chứa tất cả các tệp cần thiết để tạo Tổ chức phát hành chứng chỉ. Trong phần tiếp theo, bạn sẽ tạo khóa riêng và chứng chỉ chung cho CA của mình.

Bước 3 — Tạo một tổ chức phát hành chứng chỉ

Trước khi bạn có thể tạo khóa riêng và chứng chỉ của CA, bạn cần tạo và điền một tệp có tên là vars với một số giá trị mặc định. Trước tiên, bạn sẽ cd vào thư mục easy-rsa, sau đó bạn sẽ tạo và chỉnh sửa tệp vars bằng nano hoặc trình soạn thảo văn bản ưa thích của bạn:

  1. cd ~/easy-rsa
  2. nano vars

Sau khi tệp được mở, hãy dán vào các dòng sau và chỉnh sửa từng giá trị được đánh dấu để phản ánh thông tin tổ chức của riêng bạn. Phần quan trọng ở đây là đảm bảo rằng bạn không để trống bất kỳ giá trị nào:

~/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "CloudFly"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "Community"
set_var EASYRSA_ALGO           "ec"
set_var EASYRSA_DIGEST         "sha512"

Khi bạn hoàn tất, hãy lưu và đóng tệp. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng cách nhấn CTRL+X, sau đó nhấn YENTER để xác nhận. Bây giờ bạn đã sẵn sàng để xây dựng CA của mình.

Để tạo cặp khóa root public và private cho Tổ chức phát hành chứng chỉ của bạn, hãy chạy lại lệnh ./easy-rsa, lần này với tùy chọn build-ca:

  1. ./easyrsa build-ca

Ở đầu ra, bạn sẽ thấy một số dòng về phiên bản OpenSSL và bạn sẽ được nhắc nhập cụm mật khẩu cho cặp khóa của mình. Đảm bảo chọn một cụm mật khẩu mạnh và ghi lại ở nơi an toàn. Bạn sẽ cần nhập cụm mật khẩu bất kỳ lúc nào bạn cần tương tác với CA của mình, chẳng hạn như để ký hoặc thu hồi chứng chỉ.

Bạn cũng sẽ được yêu cầu xác nhận Common Name (CN) cho CA của mình. CN là tên được sử dụng để chỉ máy này trong ngữ cảnh của Tổ chức phát hành chứng chỉ. Bạn có thể nhập bất kỳ chuỗi ký tự nào cho Common Name của CA nhưng để đơn giản, hãy nhấn ENTER để chấp nhận tên mặc định.

Output
. . . Enter New CA Key Passphrase: Re-Enter New CA Key Passphrase: . . . Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/sammy/easy-rsa/pki/ca.crt

Lưu ý: Nếu bạn không muốn được nhắc nhập mật khẩu mỗi khi tương tác với CA của mình, bạn có thể chạy lệnh build-ca với tùy chọn nopass, như sau:

  1. ./easyrsa build-ca nopass

Bây giờ bạn có hai tệp quan trọng — ~/easy-rsa/pki/ca.crt~/easy-rsa/pki/private/ca.key — tạo thành các thành phần công khai và riêng tư của Tổ chức phát hành chứng chỉ.

  • ca.crt là tệp chứng chỉ công khai của CA. Người dùng, máy chủ và máy khách sẽ sử dụng chứng chỉ này để xác minh rằng họ là một phần của cùng một trang web tin cậy. Mọi người dùng và máy chủ sử dụng CA của bạn sẽ cần có một bản sao của tệp này. Tất cả các bên sẽ dựa vào chứng chỉ công khai để đảm bảo rằng ai đó không mạo danh hệ thống và thực hiện một cuộc tấn công trung gian.
  • ca.key là khóa riêng mà CA sử dụng để ký chứng chỉ cho máy chủ và máy khách. Nếu kẻ tấn công giành được quyền truy cập vào CA của bạn và đổi lại là tệp ca.key của bạn, thì bạn cần phải hủy CA của mình. Đây là lý do tại sao tệp ca.key của bạn chỉ nên có trên máy CA của bạn và lý tưởng nhất là máy CA của bạn phải được giữ ngoại tuyến khi không ký các yêu cầu chứng chỉ như một biện pháp bảo mật bổ sung.

Cùng với đó, CA của bạn đã sẵn sàng và sẵn sàng được sử dụng để ký các yêu cầu chứng chỉ và thu hồi chứng chỉ.

Bước 4 — Phân phối Chứng chỉ công khai của Tổ chức phát hành chứng chỉ của bạn

Bây giờ CA của bạn đã được định cấu hình và sẵn sàng hoạt động như một gốc tin cậy cho bất kỳ hệ thống nào mà bạn muốn định cấu hình để sử dụng nó. Bạn có thể thêm chứng chỉ của CA vào máy chủ OpenVPN, máy chủ web, máy chủ thư, v.v. Bất kỳ người dùng hoặc máy chủ nào cần xác minh danh tính của người dùng hoặc máy chủ khác trong mạng của bạn đều phải có một bản sao của tệp ca.crt được nhập vào kho lưu trữ chứng chỉ của hệ điều hành của họ.

Để nhập chứng chỉ công khai của CA vào hệ thống Linux thứ hai như máy chủ khác hoặc máy tính cục bộ, trước tiên hãy lấy một bản sao của tệp ca.crt từ máy chủ CA của bạn. Bạn có thể sử dụng lệnh cat để xuất nó trong một thiết bị đầu cuối, sau đó sao chép và dán nó vào một tệp trên máy tính thứ hai đang nhập chứng chỉ. Bạn cũng có thể sử dụng các công cụ như scp, rsync để truyền tệp giữa các hệ thống. Tuy nhiên, chúng tôi sẽ sử dụng tính năng sao chép và dán bằng nano trong bước này vì nó sẽ hoạt động trên tất cả các hệ thống.

Là non-root user của bạn trên Máy chủ CA, hãy chạy lệnh sau:

  1. cat ~/easy-rsa/pki/ca.crt

Sẽ có đầu ra trong thiết bị đầu cuối của bạn tương tự như sau:

Output
-----BEGIN CERTIFICATE----- MIIDSzCCAjOgAwIBAgIUcR9Crsv3FBEujrPZnZnU4nSb5TMwDQYJKoZIhvcNAQEL BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjAwMzE4MDMxNjI2WhcNMzAw . . . . . . -----END CERTIFICATE-----

Sao chép mọi thứ, bao gồm các dòng -----BEGIN CERTIFICATE----------END CERTIFICATE----- và các dấu gạch ngang.

Trên hệ thống Linux thứ hai của bạn, hãy sử dụng nano hoặc trình soạn thảo văn bản ưa thích của bạn để mở tệp có tên /tmp/ca.crt:

  1. nano /tmp/ca.crt

Dán nội dung mà bạn vừa sao chép từ Máy chủ CA vào trình chỉnh sửa. Khi bạn hoàn tất, hãy lưu và đóng tệp. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng cách nhấn CTRL+X, sau đó nhấn YENTER để xác nhận.

Bây giờ bạn đã có một bản sao của tệp ca.crt trên hệ thống Linux thứ hai của mình, đã đến lúc nhập chứng chỉ vào kho lưu trữ chứng chỉ hệ điều hành của nó.

Trên các hệ thống dựa trên Ubuntu và Debian, hãy chạy các lệnh sau với tư cách là non-root user của bạn để nhập chứng chỉ:

Ubuntu and Debian derived distributions
sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Để nhập chứng chỉ của Máy chủ CA trên hệ thống dựa trên CentOS, Fedora hoặc RedHat, hãy sao chép và dán nội dung tệp vào hệ thống giống như trong ví dụ trước trong tệp có tên /tmp/ca.crt. Tiếp theo, bạn sẽ sao chép chứng chỉ vào /etc/pki/ca-trust/source/anchors/, sau đó chạy lệnh update-ca-trust.

CentOS, Fedora, RedHat distributions
sudo cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

Bây giờ hệ thống Linux thứ hai của bạn sẽ tin cậy bất kỳ chứng chỉ nào đã được ký bởi máy chủ CA.

Lưu ý: Nếu bạn đang sử dụng CA của mình với các máy chủ web và sử dụng Firefox làm trình duyệt, bạn sẽ cần nhập trực tiếp chứng chỉ ca.crt công khai vào Firefox. Firefox không sử dụng kho lưu trữ chứng chỉ của hệ điều hành cục bộ. Để biết chi tiết về cách thêm chứng chỉ CA của bạn vào Firefox, vui lòng xem bài viết hỗ trợ này từ Mozilla về Thiết lập tổ chức phát hành chứng chỉ (CA) trong Firefox.

Nếu bạn đang sử dụng CA của mình để tích hợp với môi trường Windows hoặc máy tính để bàn, vui lòng xem tài liệu về cách sử dụng certutil.exe để cài đặt chứng chỉ CA.

Nếu bạn đang sử dụng hướng dẫn này làm điều kiện tiên quyết cho một hướng dẫn khác hoặc đã quen với cách ký và thu hồi chứng chỉ, bạn có thể dừng tại đây. Nếu bạn muốn tìm hiểu thêm về cách ký và thu hồi chứng chỉ, thì phần tùy chọn sau đây sẽ giải thích chi tiết từng quy trình.

(Tùy chọn) — Tạo yêu cầu ký chứng chỉ và thu hồi chứng chỉ

Các phần sau của hướng dẫn là tùy chọn. Nếu bạn đã hoàn thành tất cả các bước trước đó thì bạn có Cơ quan cấp chứng chỉ đang hoạt động và được định cấu hình đầy đủ mà bạn có thể sử dụng làm điều kiện tiên quyết cho các hướng dẫn khác. Bạn có thể nhập tệp ca.crt của CA và xác minh các chứng chỉ trong mạng đã được ký bởi CA của bạn.

Nếu bạn muốn thực hành và tìm hiểu thêm về cách ký yêu cầu chứng chỉ và cách thu hồi chứng chỉ, thì các phần tùy chọn này sẽ giải thích cách thức hoạt động của cả hai quy trình.

(Tùy chọn) — Tạo và ký Yêu cầu chứng chỉ hành nghề (Practice Certificate Request)

Bây giờ bạn đã có một CA sẵn sàng để sử dụng, bạn có thể thực hành tạo khóa riêng (private key) và yêu cầu chứng chỉ để làm quen với quy trình ký và phân phối.

Yêu cầu ký chứng chỉ (Certificate Signing Request - CSR) bao gồm ba phần: khóa chung (public key), xác định thông tin về hệ thống yêu cầu và chữ ký của yêu cầu đó, được tạo bằng khóa riêng của bên yêu cầu. Khóa riêng sẽ được giữ bí mật và sẽ được sử dụng để mã hóa thông tin mà sau đó bất kỳ ai có chứng chỉ công khai đã ký đều có thể giải mã được.

Các bước sau đây sẽ được chạy trên hệ thống Ubuntu hoặc Debian thứ hai của bạn, hoặc bản phân phối bắt nguồn từ một trong hai hệ thống đó. Nó có thể là một máy chủ từ xa khác hoặc một máy Linux cục bộ như máy tính xách tay hoặc máy tính để bàn. Vì easy-rsa không có sẵn theo mặc định trên tất cả các hệ thống nên chúng tôi sẽ sử dụng công cụ openssl để tạo chứng chỉ và khóa riêng thực hành.

openssl thường được cài đặt theo mặc định trên hầu hết các bản phân phối Linux, nhưng để chắc chắn, hãy chạy phần dưới đây trên hệ thống của bạn:

  1. sudo apt update
  2. sudo apt install openssl

Khi bạn được nhắc cài đặt openssl, hãy nhập y để tiếp tục các bước cài đặt. Bây giờ bạn đã sẵn sàng tạo một CSR thực hành với openssl.

Bước đầu tiên bạn cần hoàn thành để tạo CSR là tạo khóa riêng. Để tạo khóa riêng bằng openssl, hãy tạo thư mục practice-csr rồi tạo khóa bên trong thư mục đó. Chúng tôi sẽ thực hiện yêu cầu này đối với một máy chủ hư cấu có tên là sammy-server, trái ngược với việc tạo chứng chỉ được sử dụng để xác định người dùng hoặc CA khác.

  1. mkdir ~/practice-csr
  2. cd ~/practice-csr
  3. openssl genrsa -out sammy-server.key
Output
Generating RSA private key, 2048 bit long modulus (2 primes) . . . . . . e is 65537 (0x010001)

Bây giờ bạn đã có khóa riêng, bạn có thể tạo CSR tương ứng, bằng cách sử dụng tiện ích openssl. Bạn sẽ được nhắc điền vào một số trường như Quốc gia, Bang và Thành phố (Country, State, và City). Bạn có thể nhập một . nếu bạn muốn để trống một trường, nhưng hãy lưu ý rằng nếu đây là CSR thực, thì tốt nhất bạn nên sử dụng các giá trị chính xác cho vị trí và tổ chức của mình:

  1. openssl req -new -key sammy-server.key -out sammy-server.req
Output
. . . ----- Country Name (2 letter code) [XX]:VN State or Province Name (full name) []:Da Nang Locality Name (eg, city) [Default City]:Da Nang City Organization Name (eg, company) [Default Company Ltd]:CloudFly Organizational Unit Name (eg, section) []:Community Common Name (eg, your name or your server's hostname) []:sammy-server Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:

Nếu bạn muốn tự động thêm các giá trị đó như một phần của lệnh openssl thay vì thông qua lời nhắc tương tác, bạn có thể chuyển đối số -subj cho OpenSSL. Đảm bảo chỉnh sửa các giá trị được tô sáng để phù hợp với địa điểm, tổ chức và tên máy chủ thực hành của bạn:

  1. openssl req -new -key sammy-server.key -out server.req -subj \
  2. /C=VN/ST=Da\ Nang/L=Da\ Nang\ City/O=CloudFly/OU=Community/CN=sammy-server

Để xác minh nội dung của CSR, bạn có thể đọc tệp yêu cầu bằng openssl và kiểm tra các trường bên trong:

  1. openssl req -in sammy-server.req -noout -subject
Output
subject=C = VN, ST = Da Nang, L = Da Nang City, O = CloudFly, OU = Community, CN = sammy-server

Khi bạn hài lòng với chủ đề yêu cầu chứng chỉ hành nghề của mình, hãy sao chép tệp sammy-server.req vào máy chủ CA của bạn bằng cách sử dụng scp:

  1. scp sammy-server.req sammy@your_ca_server_ip:/tmp/sammy-server.req

Trong bước này, bạn đã tạo Yêu cầu ký chứng chỉ (Certificate Signing Request) cho một máy chủ hư cấu có tên sammy-server. Trong một tình huống ở thế giới thực, yêu cầu có thể đến từ thứ gì đó như máy chủ web phát triển hoặc staging cần chứng chỉ TLS để thử nghiệm; hoặc nó có thể đến từ máy chủ OpenVPN đang yêu cầu chứng chỉ để người dùng có thể kết nối với VPN. Trong bước tiếp theo, chúng tôi sẽ tiến hành ký yêu cầu ký chứng chỉ bằng khóa riêng của Máy chủ CA.

(Tùy chọn) — Ký CSR

Ở bước trước, bạn đã tạo yêu cầu chứng chỉ hành nghề và khóa cho một máy chủ hư cấu. Bạn đã sao chép nó vào thư mục /tmp trên máy chủ CA của mình, mô phỏng quy trình mà bạn sẽ sử dụng nếu bạn có các máy khách hoặc máy chủ thực gửi cho bạn các yêu cầu CSR cần được ký.

Tiếp tục kịch bản hư cấu, bây giờ Máy chủ CA cần nhập chứng chỉ hành nghề và ký tên. Sau khi yêu cầu chứng chỉ được CA xác thực và chuyển tiếp trở lại máy chủ, các máy khách tin tưởng Tổ chức phát hành chứng chỉ cũng sẽ có thể tin tưởng chứng chỉ mới được cấp.

Vì chúng ta sẽ hoạt động bên trong PKI của CA, nơi có sẵn tiện ích easy-rsa, nên các bước ký sẽ sử dụng tiện ích easy-rsa để giúp mọi việc dễ dàng hơn, thay vì sử dụng trực tiếp openssl như chúng ta đã làm trong ví dụ trước.

Bước đầu tiên để ký CSR hư cấu là nhập yêu cầu chứng chỉ bằng tập lệnh easy-rsa:

  1. cd ~/easy-rsa
  2. ./easyrsa import-req /tmp/sammy-server.req sammy-server
Output
. . . The request has been successfully imported with a short name of: sammy-server You may now use this name to perform signing operations on this request.

Giờ đây, bạn có thể ký yêu cầu bằng cách chạy tập lệnh easyrsa với tùy chọn sign-req, theo sau là loại yêu cầu và Tên chung được bao gồm trong CSR. Loại yêu cầu có thể là một trong client, server, hoặc ca. Vì chúng tôi đang thực hành với chứng chỉ cho một máy chủ hư cấu, hãy đảm bảo sử dụng loại yêu cầu server:

  1. ./easyrsa sign-req server sammy-server

Ở đầu ra, bạn sẽ được yêu cầu xác minh rằng yêu cầu đến từ một nguồn đáng tin cậy. Nhập yes sau đó nhấn ENTER để xác nhận điều này:

Output
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/sammy-server.crt

Nếu bạn đã mã hóa khóa CA của mình, thì bạn sẽ được nhắc nhập mật khẩu của mình vào thời điểm này.

Sau khi hoàn thành các bước đó, bạn đã ký CSR sammy-server.req bằng khóa riêng của Máy chủ CA trong /home/sammy/easy-rsa/pki/private/ca.key. Tệp sammy-server.crt kết quả chứa khóa mã hóa công khai của máy chủ thực hành, cũng như chữ ký mới từ Máy chủ CA. Mục đích của chữ ký là nói với bất kỳ ai tin tưởng CA rằng họ cũng có thể tin tưởng vào chứng chỉ sammy-server.

Nếu yêu cầu này dành cho một máy chủ thực như máy chủ web hoặc máy chủ VPN, thì bước cuối cùng trên Máy chủ CA sẽ là phân phối các tệp sammy-server.crtca.crt mới từ Máy chủ CA đến máy chủ từ xa đã tạo yêu cầu CSR:

  1. scp pki/issued/sammy-server.crt sammy@your_server_ip:/tmp
  2. scp pki/ca.crt sammy@your_server_ip:/tmp

Tại thời điểm này, bạn có thể sử dụng chứng chỉ đã cấp với thứ gì đó như máy chủ web, VPN, công cụ quản lý cấu hình, hệ thống cơ sở dữ liệu hoặc cho mục đích xác thực máy khách.

(Tùy chọn) — Thu hồi chứng chỉ

Đôi khi, bạn có thể cần thu hồi chứng chỉ để ngăn người dùng hoặc máy chủ sử dụng chứng chỉ đó. Có thể máy tính xách tay của ai đó đã bị đánh cắp, máy chủ web bị xâm phạm hoặc nhân viên hoặc nhà thầu đã rời khỏi tổ chức của bạn.

Để thu hồi chứng chỉ, quy trình chung tuân theo các bước sau:

  1. Thu hồi chứng chỉ bằng lệnh ./easyrsa revoke client_name.
  2. Tạo CRL mới bằng lệnh ./easyrsa gen-crl.
  3. Chuyển tệp crl.pem đã cập nhật tới máy chủ hoặc các máy chủ dựa trên CA của bạn, và trên các hệ thống đó sao chép tệp vào thư mục hoặc những thư mục được yêu cầu dành cho các chương trình tham chiếu đến tệp đó.
  4. Khởi động lại bất kỳ dịch vụ nào sử dụng CA và tệp CRL của bạn.

Bạn có thể sử dụng quy trình này để thu hồi bất kỳ chứng chỉ nào mà bạn đã cấp trước đó vào bất kỳ lúc nào. Chúng ta sẽ xem xét chi tiết từng bước trong các phần sau, bắt đầu bằng lệnh thu hồi.

Thu hồi Giấy chứng nhận

Để thu hồi chứng chỉ, hãy điều hướng đến thư mục easy-rsa trên máy chủ CA của bạn:

  1. cd ~/easy-rsa

Tiếp theo, chạy tập lệnh easyrsa với tùy chọn revoke, theo sau là tên máy khách mà bạn muốn thu hồi. Theo ví dụ thực hành ở trên, Common Name của chứng chỉ là sammy-server:

  1. ./easyrsa revoke sammy-server

Thao tác này sẽ yêu cầu bạn xác nhận việc hủy bỏ bằng cách nhập yes:

Output
Please confirm you wish to revoke the certificate with the following subject: subject= commonName = sammy-server Type the word 'yes' to continue, or any other input to abort. Continue with revocation: yes . . . Revoking Certificate 8348B3F146A765581946040D5C4D590A . . .

Lưu ý giá trị được đánh dấu trên dòng Revoking Certificate. Giá trị này là số sê-ri duy nhất của chứng chỉ đang bị thu hồi. Nếu bạn muốn kiểm tra danh sách thu hồi trong bước cuối cùng của phần này để xác minh rằng chứng chỉ có trong đó, bạn sẽ cần giá trị này.

Sau khi xác nhận hành động, CA sẽ thu hồi chứng chỉ. Tuy nhiên, các hệ thống từ xa dựa vào CA không có cách nào để kiểm tra xem có bất kỳ chứng chỉ nào đã bị thu hồi hay không. Người dùng và máy chủ sẽ vẫn có thể sử dụng chứng chỉ cho đến khi Danh sách Thu hồi Chứng chỉ (Certificate Revocation List - CRL) của CA được phân phối cho tất cả các hệ thống dựa trên CA.

Trong bước tiếp theo, bạn sẽ tạo CRL hoặc cập nhật tệp crl.pem hiện có.

Tạo danh sách thu hồi chứng chỉ

Bây giờ bạn đã thu hồi một chứng chỉ, điều quan trọng là phải cập nhật danh sách các chứng chỉ đã thu hồi trên máy chủ CA của bạn. Khi bạn có danh sách thu hồi được cập nhật, bạn sẽ có thể biết người dùng và hệ thống nào có chứng chỉ hợp lệ trong CA của bạn.

Để tạo CRL, hãy chạy lệnh easy-rsa với tùy chọn gen-crl trong khi vẫn ở trong thư mục ~/easy-rsa:

  1. ./easyrsa gen-crl

Nếu bạn đã sử dụng cụm mật khẩu khi tạo tệp ca.key, bạn sẽ được nhắc nhập cụm mật khẩu đó. Lệnh gen-crl sẽ tạo một tệp có tên crl.pem, chứa danh sách cập nhật các chứng chỉ đã bị thu hồi cho CA đó.

Tiếp theo, bạn sẽ cần chuyển tệp crl.pem đã cập nhật tới tất cả các máy chủ và máy khách dựa vào CA này mỗi khi bạn chạy lệnh gen-crl. Nếu không, các máy khách và hệ thống sẽ vẫn có thể truy cập các dịch vụ và hệ thống sử dụng CA của bạn, vì các dịch vụ đó cần biết về trạng thái bị thu hồi của chứng chỉ.

Chuyển danh sách thu hồi chứng chỉ

Bây giờ bạn đã tạo một CRL trên máy chủ CA của mình, bạn cần chuyển nó sang các hệ thống từ xa dựa trên CA của bạn. Để truyền tệp này đến máy chủ của bạn, bạn có thể sử dụng lệnh scp.

Lưu ý: Hướng dẫn này giải thích cách tạo và phân phối CRL theo cách thủ công. Mặc dù có nhiều phương pháp mạnh mẽ và tự động hơn để phân phối và kiểm tra danh sách thu hồi như OCSP-Stapling, nhưng việc định cấu hình các phương pháp đó nằm ngoài phạm vi của bài viết này.

Đảm bảo rằng bạn đã đăng nhập vào máy chủ CA của mình với tư cách là non-root user và chạy phần sau, thay thế tên DNS hoặc IP máy chủ của riêng bạn thay cho your_server_ip:

  1. scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

Bây giờ tệp đã có trên hệ thống từ xa, bước cuối cùng là cập nhật bất kỳ dịch vụ nào với bản sao mới của danh sách thu hồi.

Cập nhật các dịch vụ hỗ trợ CRL

Việc liệt kê các bước bạn cần sử dụng để cập nhật các dịch vụ sử dụng tệp crl.pem nằm ngoài phạm vi của hướng dẫn này. Nói chung, bạn sẽ cần sao chép tệp crl.pem vào vị trí mà dịch vụ mong đợi rồi khởi động lại bằng systemctl.

Khi bạn đã cập nhật các dịch vụ của mình bằng tệp crl.pem mới, các dịch vụ của bạn sẽ có thể từ chối các kết nối từ máy khách hoặc máy chủ đang sử dụng chứng chỉ đã bị thu hồi.

Kiểm tra và xác minh nội dung của CRL

Ví dụ: nếu bạn muốn kiểm tra tệp CRL để xác nhận danh sách các chứng chỉ đã bị thu hồi, hãy sử dụng lệnh openssl sau từ bên trong thư mục easy-rsa trên máy chủ CA của bạn:

  1. cd ~/easy-rsa
  2. openssl crl -in pki/crl.pem -noout -text

Bạn cũng có thể chạy lệnh này trên bất kỳ máy chủ hoặc hệ thống nào đã cài đặt công cụ openssl với một bản sao của tệp crl.pem. Ví dụ: nếu bạn đã chuyển tệp crl.pem sang hệ thống thứ hai của mình và muốn xác minh rằng chứng chỉ sammy-server đã bị thu hồi, bạn có thể sử dụng lệnh openssl như dưới đây, thay thế số sê-ri mà bạn đã lưu ý trước đó khi bạn thu hồi tệp chứng chỉ thay cho chứng chỉ được đánh dấu ở đây:

  1. openssl crl -in /tmp/crl.pem -noout -text |grep -A 1 8348B3F146A765581946040D5C4D590A
Output
Serial Number: 8348B3F146A765581946040D5C4D590A Revocation Date: Apr 1 20:48:02 2020 GMT

Lưu ý cách lệnh grep được sử dụng để kiểm tra số sê-ri duy nhất mà bạn đã lưu ý trong bước thu hồi. Giờ đây, bạn có thể xác minh nội dung của Danh sách thu hồi chứng chỉ của mình trên bất kỳ hệ thống nào dựa vào đó để hạn chế quyền truy cập đối với người dùng và dịch vụ.

Kết luận

Trong hướng dẫn này, bạn đã tạo Tổ chức phát hành chứng chỉ riêng bằng cách sử dụng gói Easy-RSA trên máy chủ Ubuntu 20.04 độc lập. Bạn đã học cách hoạt động của mô hình tin cậy giữa các bên dựa vào CA. Bạn cũng đã tạo và ký Yêu cầu ký chứng chỉ (CSR) cho một máy chủ thực hành và sau đó tìm hiểu cách thu hồi chứng chỉ. Cuối cùng, bạn đã học cách tạo và phân phối Danh sách thu hồi chứng chỉ (CRL) cho bất kỳ hệ thống nào dựa trên CA của bạn để đảm bảo rằng những người dùng hoặc máy chủ không nên truy cập dịch vụ sẽ bị ngăn chặn làm như vậy.

Bây giờ bạn có thể cấp chứng chỉ cho người dùng và sử dụng chúng với các dịch vụ như OpenVPN. Bạn cũng có thể sử dụng CA của mình để định cấu hình các máy chủ web phát triển và dàn dựng với các chứng chỉ nhằm bảo vệ môi trường non-production của bạn. Sử dụng CA có chứng chỉ TLS trong quá trình phát triển có thể giúp đảm bảo rằng mã và môi trường của bạn khớp với môi trường production của bạn nhất có thể.

Nếu bạn muốn tìm hiểu thêm về cách sử dụng OpenSSL, hướng dẫn Cơ bản về OpenSSL: Làm việc với Chứng chỉ SSL, Khóa riêng và CSR của chúng tôi có nhiều thông tin bổ sung để giúp bạn làm quen với các nguyên tắc cơ bản của OpenSSL.

0 replies