Skip to content

Instantly share code, notes, and snippets.

@tesuji
Last active March 29, 2018 14:33
Show Gist options
  • Save tesuji/4f13d2f766ab09831be91fb679d0b0c0 to your computer and use it in GitHub Desktop.
Save tesuji/4f13d2f766ab09831be91fb679d0b0c0 to your computer and use it in GitHub Desktop.

Certificate Signing Request là gì?

Certificate Signing Request là 1 đoạn text chứa thông tin của chủ sở hữu tên miền được mã hóa từ server (public key) chuẩn bị cài đặt SSL.

Nó chứa thông tin sẽ được bao gồm trong giấy chứng nhận của bạn như tên tổ chức của bạn, tên thông thường (tên miền), địa phương. Một CSR sẽ được tạo ra ngay trước khi gửi yêu cầu cho bên cung cấp SSL (CA) để sinh ra SSL Certificate.

Để tạo một CSR, cần phải có một khoá bí mật (private key) và khoá công khai (public key) được trích ra từ nó. Chúng ta có thể dùng khoá bí mật có sẵn hoặc tạo khoá mới.

Khởi tạo Private key

Sử dụng lệnh sau để tạo Private key mới:

openssl genrsa -out domain.key 2048

Lệnh này tạo một private key trong thư mục hiện tại với tên là domain.key (-out domain.key) bằng thuật toán RSA (genrsa) với độ dài khoá là 2048 bits (2048). Khoá được tạo ra sử dụng định dạng PEM.

Để giải mã private key và xem nội dung, sử dụng lệnh sau:

openssl rsa -text -in domain.key -noout

Tuỳ chọn -noout bỏ qua output được mã hoá của private key.

Xuất public key

Thực ra file private key chứa cả private key và public key. Có thể xuất public key nếu cần bằng lệnh sau:

openssl rsa -in domain.key -pubout -out domain_public.key

Tạo CSR

Sau khi đã tạo private key, ta đã sẵn sàng để tạo CSR. CSR được tạo ra với định dạng PEM và chứa phần public key của private key cũng như các thông tin về bạn (hoặc công ty của bạn)

Để tạo CSR qua private key vừa mới tạo, dùng lệnh sau:

openssl req -new -key domain.key -out domain.csr

Sau khi nhấn Enter, ta được hỏi một chuỗi các câu hỏi. Đáp án ta trả lời sẽ được nhúng trực tiếp trong CSR. Các thông tin cần nhập là:

Thông tin Giải thích
Tên quốc gia (Country Name) Nên dùng mã ISO hợp lệ gồm 2 chữ cái cho quốc gia nơi tổ chức có cơ sở như GB, FR, VN.
Vùng, Tiểu bang (State or Province Name) Sussex, Normandy, New Jersey, không nên viết tắt
Thành phố (Locality Name) Hanoi, London, Waterford, Paris, New York, Dhaka, Kochi
Tên tổ chức (Organization Name) Tên chính thức, nên thêm vào loại Ltd., Inc., hay Corp.
Tên bộ phận (Organizational Unit Name) HR, Finance, IT (có thể để trống trường này bằng cách nhấn Enter)
Tên phân biệt (Common Name) Tên miền đầy đủ (FQDN), bạn muốn xác minh: Thí dụ 'www.example.com’, hay 'mail.example.com', hoặc 'server1.example.com'
Điạ chỉ Email Điạ chỉ thư điện tử (có thể để trống trường này bằng cách nhấn Enter)
Mật khẩu (challenge password) Để trống (bằng cách nhấn Enter)
Tên công ty tuỳ chọn (optional company name) Để trống (bằng cách nhấn Enter)

Một vài thông tin trên có giá trị mặc định mà ta có thể không nhập và nhấn Enter. Các giá trị mặc định này được lấy từ file cấu hình OpenSSL nằm trong thư mục OPENSSLDIR (xem openssl version -a). Nếu không nhập và không muốn sử dụng giá trị mặc định, gõ . (dấu chấm) và nhấn Enter.

Dùng tuỳ chọn -subj

Một cách khác để tạo CSR là cung cấp các thông tin cần thiết trong dòng lệnh qua tuỳ chọn -subj.

Sử dụng lệnh sau để tắt các câu hỏi khi tạo CSR:

openssl req -new -key domain.key -out domain.csr \
-subj "/C=US/ST=Utah/L=Lehi/O=Your Company, Inc./OU=IT/CN=domain.com"

Lệnh này sử dụng file private key (-key domain.key) để tạo CSR mới (-out domain.csr) và tắt các câu hỏi.

Tạo CSR với một lệnh duy nhất

Thay vì tạo private key rồi sau đó tạo CSR trong 2 bước riêng thì ta có thể hợp cả 2 bước thành một:

Dùng lệnh sau để đồng thời tạo private key và CSR:

openssl req -new \
-newkey rsa:2048 -nodes -keyout domain.key \
-out domain.csr \
-subj "/C=US/ST=Utah/L=Lehi/O=Your Company, Inc./OU=IT/CN=domain.com"

Lệnh trên tạo một private key mới 2048 bits (-newkey) bằng thuật toán RSA và không sử dụng passphrase(-nodes), sau đó xuất file khoá với tên domain.key (-keyout domain.key).

Lệnh tạo CSR có tên domain.csr (-out domain.csr) với thông tin qua tuỳ chọn -subj.

Kiểm tra thông tin CSR

Sau khi tạo CSR, cần kiểm tra thông tin trong CSR là đúng và file chứa nó không bị sửa đổi hay hỏng:

Dùng lệnh sau để xem thông tin trong CSR trước khi đưa lên CA (ví dụ DigiCert):

openssl req -text -in domain.csr -noout -verify

Tuỳ chọn -noout bỏ qua output được mã hoá của CSR. Tuỳ chọn -verify kiểm tra chữ kí trong file để xác nhận rằng file không bị sửa đổi.

Ta có output mẫu sau:

verify OK
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=US, ST=Utah, L=Lehi, O=Your Company, Inc., OU=IT, CN=yourdomain.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:bb:31:71:40:81:2c:8e:fb:89:25:7c:0e:cb:76:
                    [...17 lines removed]
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         0b:9b:23:b5:1f:8d:c9:cd:59:bf:b7:e5:11:ab:f0:e8:b9:f6:
         [...14 lines removed]

Trên dòng đầu tiên, ta có thể thấy CSR được xác nhận (verify OK). Tại dòng thứ 4, trường Subject: chứa thông tin ta đã cung cấp. Hãy chắc chắn thông tin này chính xác.

Nếu bất kỳ thông tin nào sai, cần tạo lại CSR mới hoàn toàn. Bởi vì CSR được ký điện tử nên dù thay đổi chi một kí tự thì nó cũng bị CA từ chối.

Gửi CSR lên CA

Khi đã sẵn sàng gủi CSR đến CA, ta cần dùng định dạng PEM - định dạng gốc của CSR bằng lệnh sau:

cat domain.csr

Cần sao chép toàn bộ nội dung của output (bao gồm cả dòng -----BEGIN CERTIFICATE REQUEST----------END CERTIFICATE REQUEST-----) và dán nó trong biễu mẫu đăng ký CA.

Tham khảo:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment