Hướng dẫn dùng openssl versions trong PHP

Thứ sáu, 12/09/2014 | 00:00 GMT+7

Nội dung chính

  • Giới thiệu về Certificate Signing Requests (CSR) - Yêu cầu ký
  • Tạo Private key và CSR
  • Tạo CSR từ một private key hiện có
  • Tạo CSR từ Certificate hiện có và Private key
  • Tạo certificate SSL
  • Tạo certificate tự ký
  • Tạo certificate tự ký từ private key hiện có
  • Tạo certificate tự ký từ private key hiện có và CSR
  • Xem certificate
  • Xem các mục CSR
  • Xem mục nhập certificate
  • Xác minh Certificate đã được CA ký
  • Khóa private 
  • Tạo private key
  • Xác minh private key
  • Xác minh private key trùng với certificate và CSR
  • Mã hóa private key
  • Giải mã private key
  • Chuyển đổi định dạng certificate
  • Chuyển đổi PEM sang DER
  • Chuyển đổi DER sang PEM
  • Chuyển đổi PEM sang PKCS7
  • Chuyển đổi PKCS7 sang PEM
  • Chuyển đổi PEM sang PKCS12
  • Chuyển đổi PKCS12 sang PEM
  • Kết luận

Nội dung chính

  • Giới thiệu về Certificate Signing Requests (CSR) - Yêu cầu ký
  • Tạo Private key và CSR
  • Tạo CSR từ một private key hiện có
  • Tạo CSR từ Certificate hiện có và Private key
  • Tạo certificate SSL
  • Tạo certificate tự ký
  • Tạo certificate tự ký từ private key hiện có
  • Tạo certificate tự ký từ private key hiện có và CSR
  • Xem certificate
  • Xem các mục CSR
  • Xem mục nhập certificate
  • Xác minh Certificate đã được CA ký
  • Khóa private 
  • Tạo private key
  • Xác minh private key
  • Xác minh private key trùng với certificate và CSR
  • Mã hóa private key
  • Giải mã private key
  • Chuyển đổi định dạng certificate
  • Chuyển đổi PEM sang DER
  • Chuyển đổi DER sang PEM
  • Chuyển đổi PEM sang PKCS7
  • Chuyển đổi PKCS7 sang PEM
  • Chuyển đổi PEM sang PKCS12
  • Chuyển đổi PKCS12 sang PEM
  • Kết luận

OpenSSL là một công cụ dòng lệnh đa năng được dùng cho rất nhiều tác vụ liên quan đến Cơ sở hạ tầng public key (PKI) và HTTPS (HTTP qua TLS). Hướng dẫn này cung cấp một số tính năng phổ biến hữu ích của OpenSSL, bao gồm các ví dụ OpenSSL về việc tạo private key, yêu cầu ký certificate và chuyển đổi định dạng certificate.

Cách sử dụng Hướng dẫn này:

  • Nếu bạn chưa quen với các yêu cầu ký certificate (CSR), hãy đọc phần đầu
  • Ngoài phần đầu tiên, hướng dẫn này ở dạng đơn giản - các đoạn lệnh độc lập
  • Chuyển đến bất kỳ phần nào bạn cần tham khảo
  • Hầu hết các lệnh là trên một dòng (có \ để xuống dòng)

Giới thiệu về Certificate Signing Requests (CSR) - Yêu cầu ký

Nếu bạn muốn lấy certificate SSL từ tổ chức phát hành certificate (CA), bạn phải tạo yêu cầu ký certificate (Certificate Signing Requests - CSR). CSR bao gồm public key và một số thông tin bổ sung (không có private key ở đây). Cả hai thành phần này đều được đưa vào certificate khi nó được ký.

Khi nào bạn tạo CSR, bạn sẽ cần cung cấp thông tin liên quan đến certificate. Thông tin này được gọi là Tên phân biệt (DN). Một trường quan trọng trong DN là Common Name (CN), phải là Domain đủ điều kiện chính xác (FQDN) của server định sử dụng certificate. Cũng có thể bỏ qua dấu nhắc tương tác khi tạo CSR bằng cách chuyển các thông tin trên dòng lệnh hoặc từ file.

Các mục khác trong DN cung cấp thông tin bổ sung về doanh nghiệp hoặc tổ chức của bạn. Nếu bạn đang mua certificate SSL từ một tổ chức phát hành certificate, thì thông thường các trường bổ sung này, chẳng hạn như “Organization”, phải phản ánh chính xác thông tin chi tiết về tổ chức của bạn.

Dưới đây là ví dụ thông tin CSR:

---
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:

Nếu bạn muốn trả lời không tương tác dấu nhắc thông tin CSR, bạn có thể thực hiện bằng cách thêm tùy chọn -subj vào bất kỳ lệnh OpenSSL nào yêu cầu thông tin CSR. Đây là một ví dụ tùy chọn:

-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"

Đến đây bạn đã hiểu CSR, bạn có thể chuyển sang bất kỳ phần nào của hướng dẫn này mà bạn cần.

Tạo CSRs

Phần này bao gồm các lệnh OpenSSL có liên quan đến việc tạo CSR (và private key, nếu chúng chưa tồn tại). CSR được dùng để tạo yêu cầu ký - Certificate request SSL từ cơ quan cấp certificate.

Lưu ý bạn có thể thêm thông tin CSR không tương tác với tùy chọn -subj , được đề cập trong phần trước.

Tạo Private key và CSR

Một ví dụ sử dụng là khi muốn sử dụng HTTPS (HTTP qua TLS) để bảo mật web server Apache HTTP hoặc Nginx của bạn và bạn muốn sử dụng Tổ chức phát hành certificate (CA) để cấp certificate SSL. CSR được tạo có thể được gửi đến CA để yêu cầu cấp certificate SSL do CA ký. Nếu CA của bạn hỗ trợ SHA-2, hãy thêm tùy chọn -sha256 để ký CSR với SHA-2.

Lệnh này tạo một private key 2048 bit ( domain.key ) và một CSR ( domain.csr ) từ đầu:

openssl req \
       -newkey rsa:2048 -nodes -keyout domain.key \
       -out domain.csr

Trả lời dấu nhắc thông tin CSR để hoàn tất quy trình.

Tùy chọn -newkey rsa:2048 chỉ định rằng khóa phải là 2048-bit, được tạo bằng thuật toán RSA. Tùy chọn -nodes chỉ định rằng private key không được mã hóa bằng passphrase.

Tạo CSR từ một private key hiện có

Sử dụng phương pháp này nếu bạn đã có private key mà bạn muốn sử dụng để certificate request từ CA.

Lệnh này tạo CSR mới ( domain.csr ) dựa trên private key hiện có ( ví dụ domain.key ):

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

Trả lời dấu nhắc thông tin CSR để hoàn tất quy trình.

Tùy chọn -key chỉ định một private key hiện có ( domain.key ) sẽ được sử dụng để tạo CSR mới. Tùy chọn -new cho biết CSR đang được tạo.

Tạo CSR từ Certificate hiện có và Private key

Sử dụng phương pháp này nếu bạn muốn gia hạn certificate hiện có nhưng bạn hoặc CA của bạn không có CSR ban đầu vì một số lý do. Về cơ bản, nó giúp bạn tiết kiệm được rắc rối khi nhập lại thông tin CSR, vì nó có thông tin từ certificate hiện có.

Lệnh này tạo CSR mới ( domain.csr ) dựa trên certificate hiện có ( domain.crt ) và private key ( domain.key ):

openssl x509 \
       -in domain.crt \
       -signkey domain.key \
       -x509toreq -out domain.csr

Tùy chọn -x509toreq chỉ định rằng bạn đang sử dụng certificate X509 để tạo CSR.

Tạo certificate SSL

Một loại certificate phổ biến mà bạn có thể tự cấp là certificate tự ký . Certificate tự ký là certificate được ký bằng private key của chính nó. Certificate tự ký được dùng để mã hóa dữ liệu cũng như certificate do CA ký, nhưng user sẽ được hiển thị cảnh báo cho biết rằng certificate không được máy tính hoặc trình duyệt của họ tin cậy. Do đó, chỉ nên sử dụng certificate tự ký nếu bạn không cần chứng minh danh tính dịch vụ của bạn với user public, nó phù hợp với môi trường cục bộ của bạn
Khái niệm này đơn giản như con tự tạo dấu hợp lệ trong tổ chức bạn, không cần xác nhận hợp pháp ở qui mô pháp luật quốc gia hay quốc tế...

Phần này bao gồm các lệnh OpenSSL liên quan đến việc tạo certificate tự ký.

Tạo certificate tự ký

Ví dụ sử dụng phương pháp này nếu bạn muốn sử dụng HTTPS (HTTP qua TLS) để bảo mật web server Apache HTTP hoặc Nginx của bạn và bạn không cần certificate của bạn phải được ký bởi CA.

Lệnh này tạo private key 2048 bit ( domain.key ) và certificate tự ký ( domain.crt ) từ đầu:

openssl req \
       -newkey rsa:2048 -nodes -keyout domain.key \
       -x509 -days 365 -out domain.crt

Trả lời dấu nhắc thông tin CSR để hoàn tất quy trình.

Tùy chọn -x509 yêu req yêu req tạo một chuỗi tự ký. Tùy chọn -days 365 chỉ định rằng certificate sẽ có hiệu lực trong 365 ngày. CSR đã được tạo để thu thập thông tin để liên kết với certificate.

Tạo certificate tự ký từ private key hiện có

Sử dụng phương pháp này nếu bạn đã có private key mà bạn muốn tạo certificate tự ký với nó.

Lệnh này tạo certificate tự ký ( domain.crt ) từ private key hiện có ( domain.key ):

openssl req \
       -key domain.key \
       -new \
       -x509 -days 365 -out domain.crt

Trả lời dấu nhắc thông tin CSR để hoàn tất quy trình.

Tùy chọn -x509 yêu req yêu req tạo một chuỗi tự ký. Tùy chọn -days 365 chỉ định rằng certificate sẽ có hiệu lực trong 365 ngày. Tùy chọn -new dấu nhắc thông tin CSR.

Tạo certificate tự ký từ private key hiện có và CSR

Sử dụng phương pháp này nếu bạn đã có private key và CSR và bạn muốn tạo certificate tự ký với chúng.

Lệnh này tạo certificate tự ký ( domain.crt ) từ private key hiện có ( domain.key ) và ( domain.csr ):

openssl x509 \
       -signkey domain.key \
       -in domain.csr \
       -req -days 365 -out domain.crt

Tùy chọn -days 365 chỉ định rằng certificate sẽ có hiệu lực trong 365 ngày.

Xem certificate

Các file certificate và CSR được mã hóa ở định dạng PEM, mà ta không thể đọc được.

Phần này bao gồm các lệnh OpenSSL sẽ xuất ra các thông tin chứng chỉ trong file được mã hóa PEM.

Xem các mục CSR

Lệnh này cho phép bạn xem và xác minh nội dung của CSR ( domain.csr ) ở dạng văn bản thuần túy:

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

Xem mục nhập certificate

Lệnh này cho phép bạn xem nội dung của certificate ( domain.crt ) ở dạng văn bản thuần túy:

openssl x509 -text -noout -in domain.crt

Xác minh Certificate đã được CA ký

Sử dụng lệnh này để xác minh certificate ( domain.crt ) đã được ký bởi certificate CA cụ thể ( ca.crt ):

openssl verify -verbose -CAFile ca.crt domain.crt

Khóa private 

Phần này bao gồm các lệnh OpenSSL cụ thể để tạo và xác minh private key.

Tạo private key

Sử dụng lệnh này để tạo private key 2048 bit, được bảo vệ bằng password ( domain.key ):

openssl genrsa -des3 -out domain.key 2048

Nhập password khi được yêu cầu để hoàn tất quá trình.

Xác minh private key

Sử dụng lệnh này để kiểm tra xem private key ( domain.key ) có phải là khóa hợp lệ hay không:

openssl rsa -check -in domain.key

Nếu private key của bạn được bảo vệ bởi passphare , bạn sẽ cần nhập passphare. Sau khi thành công, khóa không được mã hóa sẽ được xuất trên terminal.

Xác minh private key trùng với certificate và CSR

Sử dụng các lệnh này để xác minh xem private key ( domain.key ) có trùng với certificate ( domain.crt ) và CSR ( domain.csr ) hay không:

openssl rsa -noout -modulus -in domain.key | openssl md5
openssl x509 -noout -modulus -in domain.crt | openssl md5
openssl req -noout -modulus -in domain.csr | openssl md5

Nếu kết quả của mỗi lệnh giống hệt nhau thì private key, certificate và CSR có liên quan với nhau.

Mã hóa private key

Thao tác này lấy một private key không được mã hóa ( unencrypted.key ) và xuất ra version mã hóa của nó (khóa encrypted.key ):

openssl rsa -des3 \
       -in unencrypted.key \
       -out encrypted.key

Nhập passphare mong muốn của bạn để mã hóa private key.

Giải mã private key

Thao tác này lấy một private key được mã hóa ( encrypted.key ) và xuất ra một version được giải mã của nó ( decrypted.key ):

openssl rsa \
       -in encrypted.key \
       -out decrypted.key

Nhập passphare cho khóa được mã hóa khi được yêu cầu.

Chuyển đổi định dạng certificate

Tất cả các certificate mà ta đang làm việc đều là certificate X.509 được mã hóa ASCII PEM. Có nhiều loại mã hóa certificate và các loại containers khác; một số ứng dụng thích các định dạng nhất định hơn những ứng dụng khác. Ngoài ra, nhiều định dạng trong số này có thể chứa nhiều mục, chẳng hạn như private key, certificate và certificate CA, trong một file duy nhất.

OpenSSL được dùng để chuyển đổi certificate sang và từ nhiều định dạng khác nhau. Phần này sẽ trình bày một số chuyển đổi có thể xảy ra.

Chuyển đổi PEM sang DER

Sử dụng lệnh này nếu bạn muốn chuyển đổi certificate được mã hóa PEM ( domain.crt ) sang certificate được mã hóa DER ( domain.der ), định dạng binary (nhị-phân):

openssl x509 \
       -in domain.crt \
       -outform der -out domain.der

Định dạng DER thường được sử dụng với Java.

Chuyển đổi DER sang PEM

Sử dụng lệnh này nếu bạn muốn chuyển đổi certificate được mã hóa DER ( domain.der ) thành certificate được mã hóa PEM ( domain.crt ):

openssl x509 \
       -inform der -in domain.der \
       -out domain.crt

Chuyển đổi PEM sang PKCS7

Sử dụng lệnh này nếu bạn muốn thêm certificate PEM ( domain.crtca-chain.crt ) vào file domain.p7b ( domain.p7b ):

openssl crl2pkcs7 -nocrl \
       -certfile domain.crt \
       -certfile ca-chain.crt \
       -out domain.p7b

Lưu ý bạn có thể sử dụng một hoặc nhiều tùy chọn -certfile để chỉ định certificate nào cần thêm vào file PKCS7.

File PKCS7, còn gọi là P7B, thường được sử dụng trong Java Keystores và Microsoft IIS (Windows). Chúng là các file ASCII có thể chứa certificate và certificate CA.

Chuyển đổi PKCS7 sang PEM

Sử dụng lệnh này nếu bạn muốn chuyển đổi file domain.p7b ( domain.p7b ) thành file PEM:

openssl pkcs7 \
       -in domain.p7b \
       -print_certs -out domain.crt

Lưu ý nếu file PKCS7 của bạn có nhiều mục trong đó (ví dụ: certificate và certificate trung gian CA), thì file PEM được tạo sẽ chứa tất cả các mục trong đó.

Chuyển đổi PEM sang PKCS12

Sử dụng lệnh này nếu bạn muốn lấy một private key ( domain.key ) và một certificate ( domain.crt ) và kết hợp chúng thành một file domain.pfx ( domain.pfx ):

openssl pkcs12 \
       -inkey domain.key \
       -in domain.crt \
       -export -out domain.pfx

Có thể cần nhập password bảo vệ hoặc có thể để trống. Lưu ý bạn có thể thêm một chuỗi certificate vào file PKCS12 bằng cách nối các certificate với nhau trong một file PEM ( domain.crt ) trong trường hợp này.

File PKCS12, còn gọi là file PFX, thường được sử dụng để nhập và xuất certificate trong Micrsoft IIS (Windows).

Chuyển đổi PKCS12 sang PEM

Sử dụng lệnh này nếu bạn muốn chuyển đổi file domain.pfx ( domain.pfx ) và chuyển đổi nó sang định dạng PEM ( domain.combined.crt ):

openssl pkcs12 \
       -in domain.pfx \
       -nodes -out domain.combined.crt

Lưu ý nếu file PKCS12 của bạn có nhiều mục trong đó (ví dụ: certificate và private key), thì file PEM được tạo sẽ chứa tất cả các mục trong đó.

Kết luận

Trên đây bao gồm hầu hết các cách sử dụng phổ biến với OpenSSL,  Certificate SSL! OpenSSL có nhiều công dụng khác mà không được đề cập ở đây, bạn có thể tham khảo khi cần ở trang chủ OpenSSL.



Các tin trước

Cài đặt Nginx trên CentOS 7 2014-07-22

Cài đặt Bảo mật cơ bản cho CentOS 7 2014-07-21

Cài đặt Linux Apache MySQL PHP (LAMP) On CentOS 7 2014-07-21

Cài đặt và sử dụng yum repositories trên Centos-6 vps 2013-10-01

Sử dụng SSH để kết nối tới Remote Server trong Ubuntu 2013-09-10

Backup postgresql databases trên Ubuntu vps 2013-08-28

Sử dụng Cron để tự động hóa các công việc việc trên server 2013-08-23

Bảo mật postgresql trên Ubuntu vps 2013-08-22

Sử dụng sftp-to-securely-transfer-files với remote-server 2013-08-13

Quản trị packages trong Ubuntu và Debian với apt-get-apt-cache 2013-08-06