OpenSSL經常使用命令手冊

OpenSSL是一個功能極其強大的命令行工具,能夠用來完成公鑰體系(Public Key Infrastructure)及HTTPS相關的不少任務。這個速查手冊整理了經常使用的OpenSSL命令的使用方法,例如生成私鑰、生成證書籤名請求以及證書格式轉換等。node

序:關於證書籤名請求(CSR)

若是你要從證書頒發機構(CA)獲取一個SSL證書,那首先須要先生成一個證書籤名請求(CSR)。CSR的主要內容是密鑰對中的公鑰,以及一些額外的信息 —— 這些內容都將在簽名時插入到證書裏。git

當使用openssl生成證書籤名請求時,須要輸入證書的惟一標識信息(Distinguished Name),其中重要的一項是常見名(Common Name),它應當是你要部署證書的主機的域名全稱(FQDN)。web

DN中的其餘條目用來提供關於你的機構的額外信息。若是你在從證書頒發機構購買SSL證書,那麼一般也須要這些額外的字段,例如組織機構(Organization),以便可以真實地展現你的機構詳情。算法

下面是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 []:

也能夠非交互方式提供生成CSR時要求的信息,任何須要CSR信息的OpenSSL命令均可以添加 -subj選項。例如:服務器

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

1、生成證書籤名請求

這一部分涵蓋與生成CSR(以及私鑰)相關的OpenSSL命令。CSR能夠用來從證書頒發機構 請求SSL證書。dom

記住,你能夠交互式的添加CSR信息,也可使用-subj選項以非交互的方式添加一樣的信息。工具

1.1 生成私鑰和CSR

若是你須要使用HTTPS來加固你的web服務器,那麼你會向證書頒發機構申請一個證書。這裏 生成的CSR能夠發送給CA來發行其簽名的SSL證書。ui

下面的命令建立一個2048位的私鑰(domain.key)以及一個CSR(domain.csr):編碼

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

這裏須要交互地輸入CSR信息,以便完成整個過程。

-newkey rsa:2048選項聲明瞭使用RAS算法生成2048位的私鑰。-nodes選項代表咱們不使用密碼加密私鑰。上面隱含了-new選項,表示要生成一個CSR。

1.2 使用已有私鑰生成CSR

若是你已經有了一個私鑰,那麼能夠直接用它來向CA申請證書。

下面的命令使用一個已有的私鑰(domain.key)建立一個新的CSR(domain.csr):

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

-key選項用來指定已有的私鑰文件,-new選項代表咱們要生成一個CSR。

1.3 使用已有的證書和私鑰生成CSR

若是你須要續訂已有的證書,但你和CA都沒有原始的CSR,那能夠再次生成CSR。

例如,下面的命令使用已有的證書(domain.crt)和私鑰(domain.key)建立一個新的CSR:

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

-x509toreq選項代表咱們要使用X509證書來製做CSR。

2、生成SSL證書

若是你只是想用SSL證書加固你的web服務器,可是並不須要CA簽名的證書,那麼一個簡單的方法是本身簽發證書。

一種常見的你能夠簽發的類型是自簽名證書 —— 使用本身的私鑰簽發的證書。自簽名證書能夠向CA簽發的證書同樣用於加密數據,可是你的用戶將收到提示說明該證書不被其計算機或瀏覽器信息。所以,自簽名證書只能在不須要向用戶證實你的身份時使用,例如非生產環境或者非公開服務。

這一部分的內容涵蓋自簽名證書生成相關的OpenSSL命令。

2.1 生成自簽名證書

若是你須要使用HTTPS加固服務器,但不須要CA簽發的證書,就可使用自簽名證書。

下面的命令建立一個2048位的私鑰(domain.key)以及一個自簽名證書(domain.crt):

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

-x509選項指出咱們要建立自簽名證書,-days 365選項聲明該證書的有效期爲365天。在上面的命令執行過程當中將建立一個臨時CSR來收集與證書相關的CSR信息。

2.2 使用已有私鑰生成自簽名證書

也可使用已有私鑰來生成自簽名證書。例如,下面的命令使用已有的私鑰(domain.key)生成一個自簽名證書(domain.crt):

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

-new選項用來啓動CSR信息採集提示。

2.3 使用已有的私鑰和CSR生成自簽名證書

第三種辦法是使用已有的私鑰和CSR來生成自簽名證書。例如,下面的命令使用私(domain.key)和CSR(domain.csr)建立一個自簽名證書(domain:crt):

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

3、查看證書

證書和CSR文件都採用PEM編碼格式,並不適合人類閱讀。這一部分主要介紹OpenSSL中查看PEM編碼文件的命令。

3.1 查看CSR條目

下面的命令能夠查看CSR文件的明文文本並進行驗證:

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

3.2 查看證書條目

下面的命令能夠查看證書文件的明文文本:

openssl x509 -text -noout -in domain.crt

3.3 驗證證書是否由CA簽發

下面的命令用來驗證證書doman.crt是否由證書頒發機構(ca.crt)簽發:

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

4、私鑰生成與驗證

這部分介紹與私鑰生成和驗證相關的OpenSSL命令。

4.1 建立私鑰

下面的命令建立一個密碼保護的2048位私鑰domain.key:

openssl genrsa -des3 -out domain.key 2048

上面命令會提示輸入密碼。

4.2 驗證私鑰

下面的命令能夠驗證私鑰domain.key是否有效:

openssl rsa -check -in domain.key

若是私鑰是加密的,命令會提示輸入密碼,驗證密碼成功則會顯示不加密的私鑰。

4.3 驗證私鑰與證書和CSR匹配

使用下面的命令驗證私鑰domain.key是否與證書domain.crt以及CSR匹配:

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

若是上面三個命令的輸出一致,那麼有極高的機率能夠認爲私鑰、證書和CSR是相關的。

4.4 加密私鑰

下面的命令將私鑰unencrypted.key加密,輸出加密後的私鑰encrypted.key:

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

上面命令執行時會提示設置密碼。

4.5 解密私鑰

下面的命令將加密私鑰encrypted.key解密,並輸出明文結果:

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

上面命令執行時會提示輸入解密密碼。

5、證書格式轉換

咱們以前接觸的證書都是X.509格式,採用ASCII的PEM編碼。還有其餘一些證書編碼格式與容器類型。OpenSSL能夠用來在衆多不一樣類型之間轉換證書。這一部分主要介紹與證書格式轉換相關的OpenSSL命令。

5.1 PEM轉DER

能夠將PEM編碼的證書domain.crt轉換爲二進制DER編碼的證書domain.der:

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

DER格式一般用於Java。

5.2 DER轉PEM

一樣,能夠將DER編碼的證書(domain.der)轉換爲PEM編碼(domain.crt):

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

5.3 PEM轉PKCS7

能夠將PEM證書(domain.crt和ca-chain.crt)添加到一個PKCS7(domain.p7b)文件中:

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

使用-certfile選項指定要添加到PKCS7中的證書。

PKCS7文件也被稱爲P7B,一般用於Java的Keystore和微軟的IIS中保存證書的ASCII文件。

5.4 PKCS7轉換爲PEM

使用下面的命令將PKCS7文件(domain.p7b)轉換爲PEM文件:

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

若是PKCS7文件中包含多個證書,例如一個普通證書和一箇中間CA證書,那麼輸出的PEM文件中將包含全部的證書。

5.5 PEM轉換爲PKCS12

能夠將私鑰文件(domain.key)和證書文件(domain.crt)組合起來生成PKCS12 文件(domain.pfx):

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

上面的命令將提示你輸入導出密碼,能夠留空不填。

PKCS12文件也被稱爲PFX文件,一般用於導入/導出微軟IIS中的證書鏈。

5.6 PKCS12轉換爲PEM

也能夠將PKCS12文件(domain.pfx)轉換爲PEM格式(domain.combined.crt):

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

注意若是PKCS12文件中包含多個條目,例如證書及其私鑰,那麼生成的PEM文件中將包含全部條目。

原文連接:OpenSSL命令速查手冊:證書、私鑰與證書籤名請求文件 - 匯智網

相關文章
相關標籤/搜索