溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux中如何使用OpenSSL來處理SSL證書

發(fā)布時(shí)間:2021-10-28 17:46:17 來源:億速云 閱讀:170 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章主要介紹linux中如何使用OpenSSL來處理SSL證書,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

OpenSSL 是一個(gè)多功能的命令行工具,可以用于與公鑰基礎(chǔ)設(shè)施Public Key Infrastructure(PKI)和 HTTPS(HTTP over TLS)相關(guān)的大量任務(wù)。這本小抄風(fēng)格的指南提供了 OpenSSL 命令的快速參考,這些命令在常見的日常場(chǎng)景中非常有用。這包括生成私鑰、證書簽署請(qǐng)求certificate signing request(CSR)和證書格式轉(zhuǎn)換的 OpenSSL 示例,但它并沒有涵蓋 OpenSSL 的所有用途。

如何使用本指南

  • 如果你不熟悉證書簽署請(qǐng)求(CSR),請(qǐng)閱讀第一部分。

  • 除了第一部分,本指南采用了簡(jiǎn)單的小抄格式:自帶了命令行代碼片段。

  • 跳到與你準(zhǔn)備完成的任務(wù)相關(guān)的任何部分。

  • 大多數(shù)命令都是單行的,為了清晰起見,已經(jīng)擴(kuò)展到多行(使用 \ 符號(hào))。

關(guān)于證書簽署請(qǐng)求(CSR)

如果你想從證書頒發(fā)機(jī)構(gòu)certificate authority(CA)那里獲得 SSL 證書,你必須生成一個(gè)證書簽署請(qǐng)求certificate signing request(CSR)。一個(gè) CSR 主要是由一個(gè)密鑰對(duì)的公鑰和一些附加信息組成。當(dāng)證書被簽署時(shí),這兩部分都會(huì)被插入到證書中。

每當(dāng)你生成一個(gè) CSR 時(shí),你會(huì)被提示提供有關(guān)證書的信息。這些信息被稱為區(qū)分名稱Distinguised Name(DN)。DN 中的一個(gè)重要字段是通用名稱Common Name(CN),它應(yīng)該是你打算使用證書的主機(jī)的完全合格域名Fully Qualified Domain Name(FQDN)。當(dāng)創(chuàng)建 CSR 時(shí),也可以通過命令行或文件傳遞信息來跳過交互式提示。

DN 中的其他項(xiàng)目提供了有關(guān)你的業(yè)務(wù)或組織的附加信息。如果你是從證書機(jī)構(gòu)購買 SSL 證書,通常要求這些附加字段(如“組織Organization”)準(zhǔn)確地反映你的組織的詳細(xì)信息。

下面是一個(gè) CSR 信息提示的例子:

---Country Name (2 letter code) [AU]:USState or Province Name (full name) [Some-State]:New YorkLocality Name (eg, city) []:BrooklynOrganization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn CompanyOrganizational Unit Name (eg, section) []:Technology DivisionCommon Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.comEmail Address []:

如果你想非交互式地回答 CSR 信息提示,你可以通過在任何請(qǐng)求 CSR 信息的 OpenSSL 命令中添加 -subj 選項(xiàng)來實(shí)現(xiàn)。這里是該選項(xiàng)的一個(gè)例子,使用上面代碼塊中顯示的相同信息:

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

現(xiàn)在你已經(jīng)了解了 CSR,可以自由跳轉(zhuǎn)到本指南中涵蓋你的 OpenSSL 需求的任何一節(jié)。

生成 CSR

本節(jié)介紹了與生成 CSR(以及私鑰,如果它們還不存在的話)有關(guān)的 OpenSSL 命令。CSR 可以用來向證書頒發(fā)機(jī)構(gòu)請(qǐng)求 SSL 證書。

請(qǐng)記住,你可以通過上一節(jié)中提到的 -subj 選項(xiàng)非交互式地添加 CSR 信息。

生成一個(gè)私鑰和一個(gè) CSR

如果你想使用 HTTPS(HTTP over TLS)來保護(hù)你的 Apache HTTP 或 Nginx Web   服務(wù)器的安全,并且你想使用一個(gè)證書頒發(fā)機(jī)構(gòu)(CA)來頒發(fā) SSL 證書,那么就使用這個(gè)方法。生成的 CSR 可以發(fā)送給 CA,請(qǐng)求簽發(fā)由 CA   簽名的 SSL 證書。如果你的 CA 支持 SHA-2,請(qǐng)?zhí)砑?-sha256 選項(xiàng),用 SHA-2 簽署 CSR。

這條命令從頭開始創(chuàng)建一個(gè) 2048 位的私鑰(domain.key)和一個(gè) CSR(domain.csr):

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

回答 CSR 信息提問,完成該過程。

選項(xiàng) -newkey rsa:2048 指定密鑰應(yīng)該是 2048 位,使用 RSA 算法生成。選項(xiàng) -nodes 指定私鑰沒有用密碼加密。這里沒有包含 -new 選項(xiàng),而是隱含在其中,表示正在生成一個(gè) CSR。

從現(xiàn)有的私鑰中生成一個(gè) CSR

如果你已經(jīng)有了私鑰,并想用它向 CA 申請(qǐng)證書,請(qǐng)使用這個(gè)方法。

該命令基于現(xiàn)有的私鑰(domain.key)創(chuàng)建一個(gè)新的 CSR(domain.csr):

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

回答 CSR 信息提問,完成該過程。

選項(xiàng) -key 指定一個(gè)現(xiàn)有的私鑰(domain.key),它將被用來生成一個(gè)新的 CSR。選項(xiàng) -new 表示正在生成一個(gè) CSR。

從現(xiàn)有的證書和私鑰生成 CSR

如果你想更新現(xiàn)有的證書,但由于某些原因,你或你的 CA 沒有原始的 CSR,請(qǐng)使用這個(gè)方法?;旧峡梢允∪ブ匦螺斎?CSR 信息的麻煩,因?yàn)樗菑默F(xiàn)有證書中提取信息的。

該命令基于現(xiàn)有的證書(domain.crt)和私鑰(domain.key)創(chuàng)建一個(gè)新的 CSR(domain.csr):

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

選項(xiàng) -x509toreq 指定你使用一個(gè) X509 證書來制作 CSR。

生成 SSL 證書

如果你想使用 SSL 證書來確保服務(wù)的安全,但你不需要 CA 簽名的證書,一個(gè)有效的(和免費(fèi)的)解決方案是簽署你自己的證書。

你可以自己簽發(fā)的一種常見證書是自簽證書self-signed certificate。自簽證書是用自己的私鑰簽署的證書。自簽證書和 CA 簽名證書一樣可以用來加密數(shù)據(jù),但是你的用戶會(huì)顯示一個(gè)警告,說這個(gè)證書不被他們的計(jì)算機(jī)或?yàn)g覽器信任。因此,只有當(dāng)你不需要向用戶證明你的服務(wù)身份時(shí),才可以使用自簽名證書(例如非生產(chǎn)或非公開服務(wù)器)。

本節(jié)介紹與生成自簽名證書相關(guān)的 OpenSSL 命令。

生成自簽證書

如果你想使用 HTTPS(HTTP over TLS)來保護(hù)你的 Apache HTTP 或 Nginx Web 服務(wù)器,并且你不需要你的證書由 CA 簽名,那么就使用這個(gè)方法。

這個(gè)命令可以從頭開始創(chuàng)建一個(gè) 2048 位的私鑰(domain.key)和一個(gè)自簽證書(domain.crt):

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

回答 CSR 信息提問,完成該過程。

選項(xiàng) -x509 告訴 req 子命令創(chuàng)建一個(gè)自簽名的證書。-days 365 選項(xiàng)指定證書的有效期為 365 天。它會(huì)生成一個(gè)臨時(shí)的 CSR,以收集與證書相關(guān)的信息。

從現(xiàn)有私鑰生成自簽名證書

如果你已經(jīng)有了一個(gè)私鑰,并且你想用它來生成一個(gè)自簽證書,請(qǐng)使用這個(gè)方法。

這條命令可以從現(xiàn)有的私鑰(domain.key)中創(chuàng)建一個(gè)自簽證書(domain.crt):

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

回答 CSR 信息提問,完成該過程。

選項(xiàng) -x509 告訴 req 子命令創(chuàng)建一個(gè)自簽證書。-days 365 選項(xiàng)指定證書的有效期為 365 天。選項(xiàng) -new 啟用 CSR 信息提問。

從現(xiàn)有的私鑰和 CSR 生成自簽證書

如果你已經(jīng)有了私鑰和 CSR,并且你想用它們生成一個(gè)自簽證書,請(qǐng)使用這個(gè)方法。

這條命令將從現(xiàn)有的私鑰(domain.key)和(domain.csr)中創(chuàng)建一個(gè)自簽證書(domain.crt)。

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

選項(xiàng) -days 365 指定證書的有效期為 365 天。

查看證書

證書和 CSR 文件是以 PEM 格式編碼的,不適合被人讀取。

本節(jié)介紹的 OpenSSL 命令將輸出 PEM 編碼文件的實(shí)際條目。

查看 CSR 條目

該命令允許你查看和驗(yàn)證純文本的 CSR(domain.csr)的內(nèi)容:

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

查看證書條目

該命令允許你查看純文本證書(domain.crt)的內(nèi)容:

  1. openssl x509 \
          -text -noout \
          -in domain.crt

驗(yàn)證證書由 CA 簽署

使用此命令驗(yàn)證證書(domain.crt)是否由特定的 CA 證書(ca.crt)簽署:

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

私鑰

本節(jié)介紹了用于創(chuàng)建和驗(yàn)證私鑰的 OpenSSL 命令。

創(chuàng)建私鑰

使用該命令創(chuàng)建一個(gè)受密碼保護(hù)的 2048 位私鑰(domain.key):

  1. openssl genrsa \
          -des3 -out domain.key 2048

在提示時(shí)輸入密碼以完成該過程。

驗(yàn)證私鑰

使用此命令檢查私鑰(domain.key)是否為有效密鑰:

  1. openssl rsa \
          -check -in domain.key

如果你的私鑰已經(jīng)加密,系統(tǒng)會(huì)提示你輸入它的密碼,成功后,未加密的密鑰會(huì)在終端上輸出。

驗(yàn)證私鑰是否與證書和 CSR 匹配

使用這些命令來驗(yàn)證私鑰(domain.key)是否匹配證書(domain.crt)和 CSR(domain.csr):

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

如果每條命令的輸出都是相同的,那么私鑰、證書和 CSR 就極有可能是相關(guān)的。

加密私鑰

這需要一個(gè)未加密的私鑰(unencrypted.key),并輸出它的加密版本(encrypted.key):

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

輸入你所需的密碼,以加密私鑰。

解密私鑰

這需要一個(gè)加密的私鑰(encrypted.key),并輸出一個(gè)解密的版本(decrypted.key):

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

在提示時(shí),輸入加密密鑰的密碼。

轉(zhuǎn)換證書格式

我們一直在使用的所有證書都是 ASCII 碼 PEM 編碼的 X.509 證書。還有很多其他的證書編碼和容器類型;一些應(yīng)用程序喜歡某些格式而不是其他格式。此外,這些格式中的許多格式可以在一個(gè)文件中包含多個(gè)項(xiàng)目,如私鑰、證書和 CA 證書。

OpenSSL 可以用來將證書在則西格式間轉(zhuǎn)換。本節(jié)將介紹一些可能的轉(zhuǎn)換。

將 PEM 轉(zhuǎn)換為 DER

如果要將 PEM 編碼的證書(domain.crt)轉(zhuǎn)換為 DER 編碼的證書(domain.der),即二進(jìn)制格式,請(qǐng)使用此命令:

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

DER 格式通常與 Java 一起使用。

將 DER 轉(zhuǎn)換為 PEM

如果要將 DER 編碼的證書(domain.der)轉(zhuǎn)換為 PEM 編碼的證書(domain.crt),請(qǐng)使用此命令:

openssl x509 \       -inform der -in domain.der \       -out domain.crt
將 PEM 轉(zhuǎn)換為 PKCS7

如果你想把 PEM 證書(domain.crtca-chain.crt)添加到 PKCS7 文件(domain.p7b)中,請(qǐng)使用該命令:

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

請(qǐng)注意,你可以使用一個(gè)或多個(gè) -certfile 選項(xiàng)來指定要添加到 PKCS7 文件中的證書。

PKCS7 文件,也被稱為 P7B,通常用于 Java Keystores 和 Microsoft IIS(Windows)。它們是 ASCII 文件,可以包含證書和 CA 證書。

將 PKCS7 轉(zhuǎn)換為 PEM

如果你想將 PKCS7 文件(domain.p7b)轉(zhuǎn)換為 PEM 文件,請(qǐng)使用該命令:

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

請(qǐng)注意,如果你的 PKCS7 文件中有多個(gè)項(xiàng)目(如證書和 CA 中間證書),創(chuàng)建的 PEM 文件將包含其中的所有項(xiàng)目。

將 PEM 轉(zhuǎn)換為 PKCS12

如果你想使用私鑰(domain.key)和證書(domain.crt),并將它們組合成一個(gè) PKCS12 文件(domain.pfx),請(qǐng)使用這個(gè)命令:

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

系統(tǒng)會(huì)提示你輸入導(dǎo)出密碼,你可以留空。請(qǐng)注意,在這種情況下,你可以通過將多個(gè)證書連接到一個(gè) PEM 文件(domain.crt)中來添加一個(gè)證書鏈到 PKCS12 文件中。

PKCS12 文件,也被稱為 PFX 文件,通常用于在 Micrsoft IIS(Windows)中導(dǎo)入和導(dǎo)出證書鏈。

將 PKCS12 轉(zhuǎn)換為 PEM

如果你想轉(zhuǎn)換 PKCS12 文件(domain.pfx)并將其轉(zhuǎn)換為 PEM 格式(domain.combined.crt),請(qǐng)使用此命令:

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

請(qǐng)注意,如果你的 PKCS12 文件中有多個(gè)項(xiàng)目(如證書和私鑰),創(chuàng)建的 PEM 文件將包含其中的所有項(xiàng)目。

OpenSSL 版本

openssl version 命令可以用來檢查你正在運(yùn)行的版本。你正在運(yùn)行的 OpenSSL 版本,以及編譯時(shí)使用的選項(xiàng)會(huì)影響到你可以使用的功能(有時(shí)也會(huì)影響到命令行選項(xiàng))。

下面的命令顯示了你正在運(yùn)行的 OpenSSL 版本,以及它被編譯時(shí)的所有選項(xiàng):

openssl version -a

本指南是使用具有如下細(xì)節(jié)的 OpenSSL 二進(jìn)制文件編寫的(參見前面命令的輸出):

OpenSSL 1.0.1f 6 Jan 2014built on: Mon Apr  7 21:22:23 UTC 2014platform: debian-amd64options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)compiler: cc -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -Wl,-Bsymbolic-functions -Wl,-z,relro -Wa,--noexecstack -Wall -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASMOPENSSLDIR: "/usr/lib/ssl"

以上是“l(fā)inux中如何使用OpenSSL來處理SSL證書”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI