1. 程式人生 > >使用Hashicorp Vault管理PKI並頒發證書

使用Hashicorp Vault管理PKI並頒發證書

                                                                  使用vault搭建CA,即PKI

Vault是一個加密的鍵值儲存,旨在解決當今組織面臨的許多挑戰,無論是小型創業公司還是企業,它們都面臨一些基本問題,其中一個是“祕密蔓延”,其中意味著100個憑證只是漫遊,由幾十個不同的人生成。這是由於缺乏證書的集中化; 組織沒有所有這些憑據來源的單一來源。

另一個這樣的挑戰是“有限可見性”; 組織不知道使用了哪些憑據?它應該被撤銷嗎?如果被撤銷會破壞一些東西嗎?您看,這些憑據的使用方式的可見性非常有限。

Hashicorp Vault是一個集中式鍵值儲存,它使用策略和ACL提供對憑據的限制性訪問。它還可以作為傳遞加密,這實質上意味著它不僅可以將資料儲存在Vault中,而且可以將加密資料返回給使用者,從而提供加密即服務(EaaS)模型。Vault的一些獨特功能將其與市場上的任何其他工具區分開來,

  • 使用祕密後端生成動態憑據。
  • 對每個請求和響應進行身份驗證和稽核。
  • 具有與之關聯的租約的憑證。

但並非全部,Vault允許您管理整個公鑰基礎結構(PKI)以確保不同服務之間的安全通訊。這允許公司使用簡單的API呼叫輕鬆設定自己的證書頒發機構(CA),撤銷或頒發新證書,從而摒棄不斷生成自簽名證書的痛苦過程。

在本指南中,我將簡要介紹Vault如何工作,如何配置,以及最後如何使用它來建立自己的根CA,動態釋出證書,從而利用Vault的auth方法。

本指南涵蓋的內容:

  • 安裝和配置Vault
  • 保險庫初始化的工作原理
  • 保險庫如何保護自己
  • 建立根CA.
  • 建立中級CA.
  • 向Web伺服器頒發證書

正在下載Vault

Vault預編譯的二進位制檔案可以從https://www.vaultproject.io/downloads.html下載.zip檔案中的vault二進位制檔案是執行Vault所必需的。下載後,解壓縮檔案,

<span style="color:rgba(0, 0, 0, 0.84)">解壓縮vault_0.10.4_linux_amd64.zip -d / etc / vault /</span>

將保險庫新增到PATH中

<span style="color:rgba(0, 0, 0, 0.84)">$ echo'export PATH = $ PATH:/ etc / vault /'>>〜/ .profile</span>
<span style="color:rgba(0, 0, 0, 0.84)">$。〜/ .profile檔案</span>

驗證安裝,

<span style="color:rgba(0, 0, 0, 0.84)">金庫-h</span>

Vault附帶預先配置的開發模式,不需要任何進一步配置,並允許進行實驗。在此模式下,Vault完全在記憶體中執行,並使用單個解封金鑰啟動未密封(稍後會更多)(建議不要在生產中執行dev模式,因為它非常不安全)。

為了充分利用Vault的功能,我將設定一個真正的Vault伺服器,它需要一個與dev模式不同的配置檔案。Vault接受HCLJSON作為其配置,並且必須提供-config標誌。Vault接受各種引數,其中需要儲存偵聽器。儲存配置,其中Vault資料應被儲存在儲存後端,而後者則允許配置主機,其中保管箱偵聽API請求。您可以在Vault配置頁面上瀏覽更多可選引數。

那麼,讓我們建立一個包含所需引數的配置檔案,

<span style="color:rgba(0, 0, 0, 0.84)">後端“檔案”{ 
path =“/ home / suf / secrets” 
}</span>
<span style="color:rgba(0, 0, 0, 0.84)">監聽器“tcp”{ 
address =“127.0.0.1:8200” 
tls_disable = 1 
}</span>

將以上內容儲存在config.hcl檔案中,然後啟動Vault伺服器,

<span style="color:rgba(0, 0, 0, 0.84)">vault server -config config.hcl</span>

在伺服器執行時,開啟另一個終端,並初始化保管庫以供使用:

<span style="color:rgba(0, 0, 0, 0.84)">export VAULT_ADDR ='http://127.0.0.1:8200'</span>
<span style="color:rgba(0, 0, 0, 0.84)">保險庫運營商init</span>

一旦伺服器初始化,您將在螢幕上看到一些有用的資訊,包括Unseal Keys,Initial Root Token等,如下所示,

將此資訊複製到一個單獨的檔案中,因為我們將盡快使用它。現在,讓我們來談談為什麼這些資訊非常重要,以及為什麼你的Vault儲存如果丟失就變得無用。

讓我給你一點背景知識。當您第一次執行Vault伺服器時,它以“密封”狀態啟動,這實際上意味著即使Vault知道加密儲存的位置以及如何訪問它,它也不知道如何解密資料休息。 
這是一種雞和蛋的情況,問題是Vault應該如何訪問自己的加密資料?必須有一個金鑰才能解密保險庫的整個儲存空間。
那麼Vault在哪裡儲存這個解密金鑰?答案是,無處可去。實際上,vault使用Shamir的祕密共享演算法,這是一種祕密共享的形式,其中實際的金鑰被分成N個部分,T其中需要重新建立原始金鑰。保管庫中的這N個部分稱為“Unseal Keys”,它們是在Vault伺服器初始化時生成的。

那麼,初始化Vault伺服器時發生了什麼?

當您首次使用vault operator init命令初始化伺服器時,Vault會生成一個主金鑰,並立即將其拆分為5個關鍵部分,即“Unseal Key 1 ... 5”。該主金鑰從未儲存在任何地方,並且檢索該金鑰的唯一方法是讓法定數量的密封金鑰重新生成它,如下所示:

Vault使用Shamir Secret共享演算法來建立主金鑰

該主金鑰用於解密基礎加密金鑰。

這是首次初始化Vault伺服器時顯示的實際訊息,

Vault初始化為5個金鑰共享,金鑰閾值為3.請安全地分發上面列印的金鑰份額。當Vault重新密封,重新啟動或停止時,您必須提供至少3個這些金鑰才能在開始處理請求之前啟動它。
Vault不儲存生成的主金鑰。如果沒有至少3個鍵來重建主金鑰,Vault將永久密封!

如您所見,在我們可以訪問Vault之前,需要3個Unseal金鑰才能啟動Vault。如果您在啟封Vault之前嘗試訪問Vault,則會Vault is sealed出現錯誤。讓我們繼續使用5個unseal鍵中的任意3個來開啟金庫,

<span style="color:rgba(0, 0, 0, 0.84)">保險庫操作員開封5E + rusg + bMYNjLyI / QltN / WBB / uK8IhwjA9lKicLJPiP 
保險庫操作員開封06w4FpfzNbq4Vid060m4HRNZ4pW / 7ijLOuY4aXTRBdCv 
保險櫃操作員開封jP2ugbUMy1l2l + kNZQX8yfLtqGS25FVIRnRu4DD + z3PZ</span>

開封保險櫃

成功啟封后,使用之前儲存的根令牌登入Vault。(您可以在此處瞭解有關Root Token的更多資訊)

<span style="color:rgba(0, 0, 0, 0.84)">保險庫登入</span>

您應該收到以下訊息,

登入保險庫

在繼續之前,我們需要了解一些關於保險庫後端的基礎知識,因為這是我們將用於建立PKI的內容。

Vault後端

Vault具有後端概念,您可以將它們視為具有某些特定功能的外掛。例如,在我們的配置檔案中,我們使用了稱為檔案的儲存後端。Vault還提供其他儲存後端,例如; 記憶體,領事,mysql,postgresql等

就像儲存後端一樣,Vault有“祕密後端”,負責管理機密。一些祕密後端只是像加密的鍵值儲存一樣,而其他祕密後端在查詢時動態生成祕密。PKI就是這樣一個後端,可以管理整個CA. 需要注意的是,與儲存後端不同,儲存後端只能有一個,可以建立多個PKI後端,並且可以使用路徑將它們相互隔離。這在我們的情況下是必要的,因為我們將建立兩個PKI後端,一個用於根CA,另一個用於中間CA.

我們現在有能力開始建立我們的信任鏈!

建立根CA.

在建立根CA之前,我們需要啟用PKI後端,並將其掛載到路徑,

<span style="color:rgba(0, 0, 0, 0.84)">保險庫密碼啟用-path = rootca_store -description =“根CA的PKI後端”-max-lease-ttl = 87600h pki</span>
<span style="color:rgba(0, 0, 0, 0.84)"><strong><em>成功!在以下位置啟用了pki secrets引擎:rootca_store /</em></strong></span>

通過列出所有祕密引擎驗證,

<span style="color:rgba(0, 0, 0, 0.84)">保險庫祕密清單</span>

-pathrootca_store在這種情況下,選項在新路徑上掛載PKI祕密後端。保險庫中的每個祕密引擎都定義了自己的路徑和屬性。對於使用者,祕密引擎的行為類似於虛擬檔案系統,支援讀取,寫入和刪除等操作,具體取決於使用角色分配給它們的許可權。

現在讓我們建立我們的CA證書和金鑰。

/pki/root/generate/:type端點用於生成根CA. :type在此端點中指定要建立的根的型別。它可以是exported,在這種情況下,根私鑰將在響應中返回; 或者internal,私鑰不會被退回,以後無法檢索。

<span style="color:rgba(0, 0, 0, 0.84)">保險庫寫rootca_store / root / generate / internal \ 
common_name =“suf.com”\ 
ttl = 87600h \ 
key_bits = 4096</span>

要了解我使用的其他選項,請檢視Vault的PKI文件

驗證是否已生成證書:

<span style="color:rgba(0, 0, 0, 0.84)">curl -s <a data-cke-saved-href="http://127.0.0.1:8200/v1/rootca_store/ca/pem" href="http://127.0.0.1:8200/v1/rootca_store/ca/pem" class="markup--anchor markup--pre-anchor">http://127.0.0.1:8200/v1/rootca_store/ca/pem</a></span>

大!您剛剛建立了一個根CA.

可是等等!我們還沒有配置證書撤銷,即CRL或OSCP。必須使用config/urls端點配置。

讓我們繼續並配置CRL然後:

<span style="color:rgba(0, 0, 0, 0.84)">保險庫寫rootca_store / config / urls issuing_certificates =“ <a data-cke-saved-href="http://127.0.0.1:8200/v1/rootca_store/ca" href="http://127.0.0.1:8200/v1/rootca_store/ca" class="markup--anchor markup--pre-anchor">http://127.0.0.1:8200/v1/rootca_store/ca</a> ”\ 
crl_distribution_points =“ <a data-cke-saved-href="http://127.0.0.1:8200/v1/rootca_store/crl" href="http://127.0.0.1:8200/v1/rootca_store/crl" class="markup--anchor markup--pre-anchor">http://127.0.0.1:8200/v1/rootca_store/crl</a> ”</span>

注意我還配置了issuing_certificatesurl,它指定了Issuing Certificate欄位的值。二者issuing_certificatescrl_distribution_points可以是一個數組或逗號分隔的字串列表。

建立中間CA.

必須遵循以下步驟才能生成中間CA:

  • 將PKI掛載到新路徑
  • 生成中間證書籤名請求(CSR)
  • 使用根CA簽署中間CSR並生成證書
  • 將Root簽名證書匯入中間CA.
  • 驗證簽名是否成功
  • 配置證書吊銷

讓我們開始吧!

  • 將PKI掛載到新路徑
<span style="color:rgba(0, 0, 0, 0.84)">保險庫密碼啟用-path = interca -description =“中間CA的PKI後端”\ 
-max-lease-ttl = 87600h pki 
<strong><em>成功!啟用pki祕密引擎:interca /</em></strong></span>
  • 生成中間CSR

生成證書籤名請求,並將其儲存到檔案中,我們將其命名為signing_request.csr

<span style="color:rgba(0, 0, 0, 0.84)">vault寫interca / intermediate / generate / internal ttl = 26280h key_bits = 4096 | grep -zo  - “ -  * BEGIN。* END。*  -  * $”> signing_request.csr</span>

我們需要從中間機構獲取該簽名請求,並使用之前生成的根CA對其進行簽名。

  • 使用根CA簽署中間CSR並生成證書
<span style="color:rgba(0, 0, 0, 0.84)">保險庫寫rootca_store / root / sign-intermediate \ 
csr [email protected]_request.csr \ 
ttl = 8760h \ format = pem_bundle</span>

將certificate和issuing_ca儲存在一個檔案中,假設是mycertreq.crt

<span style="color:rgba(0, 0, 0, 0.84)">----- BEGIN CERTIFICATE ----- 
MIIFhzCCA2 + gAwIBAgIUH83a + PyxwgzsZERZHzRR1kwwSc4wDQYJKoZIhvcNAQEL 
BQAwEjEQMA4GA1UEAxMHc3VmLmNvbTAeFw0xODA4MDUwMjEyMTJaFw0xOTA4MDUw 
MjEyNDJaMAAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDNgvwCJIY / 
+ DxWl34sFz7QaI17ckBcAqv0dQbjH1yFXQ7H9Rt / jx1sUIZ8ErAJZzbSOUCPZWQ8 
sMtnvhshptPIlqg7JmCcz6kWQaY1cO9qGaVlFUJunfIbY0l8EJX6LSjN82OskyXk 
1PLWWTYS32GqJqCTYXe4ZhUJ3TYSkrJKd8MBGu4IPVaZOxlbsR63S + Gv9e + oIWiS 
Y5 / Vh07BihHHUJrWjov0ab4e4uhFduQrMsbr8k4q83XeNII4Uq1MzQvf3EK3l6fc 
JqQ86NEqi36DBUgIJLb / SmyCoYBY37EQgsmEcOiaDJiaoOT / tfO6IYnhB9B9zEQU 
8lOnFD8ULlGdfu / YaxRixKKIYFTzeAU / 4YDGRxO5drYIK0uCqC83aZYFZnX9U4cN 
5 / sxGTIq / 5ZkQA11bYCGnFr5OzraRA7kkOxIYOWDuW / cxEhm2O5pRRoZY2Dzi55U
4Y9JS0 /的Rq + TXveHCLm6gtYsKK8g1dGiMGiiFnOZn6XhAh5TFLTEjFdbi8a5jBzG + 
QDI / APWA + 3wHgPhTw2i5ynVOOkq0 /氪+ 425wd4WAwycKb3m8xPtrZCzO3U4xysHe 
W + fV7a363 + 0aT4ftyRUEZache6Xd7 / YTZxoVbr6 / AZ + AC + sbU8QeN4S6n7LaUTmB 
8DkruOhWu0B + CI4PfevWScwSk4XGu0IKvwIDAQABo4HmMIHjMA4GA1UdDwEB / WQE 
AwIBBjAPBgNVHRMBAf8EBTADAQH / MB0GA1UdDgQWBBRCLHE6vM3saxmePN8Uc4uu 
SdcwRTAfBgNVHSMEGDAWgBQIviOHuu6uxaPbmCpy1riVAmnOkDBEBggrBgEFBQcB 
AQQ4MDYwNAYIKwYBBQUHMAKGKGh0dHA6Ly8xMjcuMC4wLjE6ODIwMC92MS9yb290 
Y2Ffc3RvcmUvY2EwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovLzEyNy4wLjAuMTo4 
MjAwL3YxL3Jvb3RjYV9zdG9yZS9jcmwwDQYJKoZIhvcNAQELBQADggIBAFxSk + ZD 
09mEtlOR75t5ZOuwsNXnlPAhAiSSioqDtIXYR3 / 8QhE8PDyiP3ZM6LaCp24QSh8B 
MlPPQ4DkVul1ofAGDU7vfk5tCaj8AAPPFp8Dikffw5HFuhDeEa4EYqRWr1uhz +牛
6V177k27FKrL4dAvOu7Hi0cTXC3vahTF25tV8v3GHz1XGlalCUL9IVa7L22a0evN 
Cfx9ewRz7fAwEN1mygwC + SBfY / 0TlrTb8tlPuMaTZAafS8x4mJuvO9a41sK2i / 1K 
mn0N8n5sGjh9JJBMEJ4b9jDfwJLB7a91Hv4kGMO7 / qyEwl4rQJdMWrBVYkrncSXu 
LW1LMeCfzZRecMHZMdwuWwdQzBrIXky96vu1T5iiaBUJPBTcC7aHSfwn0gGQyYaI 
kc3Us5RgToZES + SksrcUWBhHVsndme4CGHXiiKHox / HKZE3ctcc + AJq ++ kUwMb0P 
XP / WyVINjLTjX80YL5Qjf4ROqcCOzQmnF2Yqx + 9ujTEEkJ9 / ZK56bIUWtq2aVLtz 
EKDaBNYD8ss9fizqDWtGKFscObdu7xuNj8VViAqerDhgx / YqOykE8OWhRgxQpNSl 
qroZr4Vi2cBPFIB4FdjA6rmFKNE5EEsdF / 6df9Lt6 + bGhmR9ZlxEmbWMHO + XeFfB 
4olsunIOoaF0qAV + BtnzvK4CJVrLo3y7kqE8 
----- END CERTIFICATE- ---- 
-----開始證書----- 
MIIFKTCCAxGgAwIBAgIUdRRhQEOr37CPPjR9PKMMRzZOcLcwDQYJKoZIhvcNAQEL
BQAwEjEQMA4GA1UEAxMHc3VmLmNvbTAeFw0xODA4MDUwMDQ2MThaFw0yODA4MDIw 
MDQ2NDdaMBIxEDAOBgNVBAMTB3N1Zi5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4IC 
DwAwggIKAoICAQDeqKJ256dW9USAzsKWRxfoLk3oM0 / JBosAD4Ab4bt40MiRCSav 
i5rqBA0JIDC85N1dQBA73iU0a43D0hGWXY3B9IdzlHR3mPLTBtEtp / bL6Yn6D1dj 
cbBSMNjfbyjOCa942IQP4CrDyXkC8XnjRkDmrNLxVXSDOAHnbAePHZaF9U2TMZ3w 
olOwkffxFQ / KxEqluVXSKTipZM1FNMN4tjYigoDHHutc2MCP9h9yG8G / PdAKMh +一個
quRECkYPbhKJkRaPYeuEec2yc + RWNRE0irfadnRVhjcCDp / TEHDrZlVbgLHjF5g3 
gI421qtAHOtPIdDIqFaODJ1rIWHGrVIH9ohEp00T7FTHgqpssuAvIeBcdAfpbcIs 
r3VTDOKD / 3V9fwzkjLfEqnV / kxyHumDCSD5pAqyVn0nGgPv8a4ayOkh8RUvq9igY 
rzkJWck4WXfalTOnDV8BTX7H8GLvZ7CnzPp + jR9miNMhSeq4WCMMIkaGX / yV2U1Q 
GMV / UuP5dLHB / PeksAyJGDGjMqTLKlaHe2aRvEjlqvTWpoTglwOYTSC / BmRZbDAX
WKtvjmVVXedOiLQ37q + AGklpJa6GlcGBeqViQKFnEHuUr3aiT26YGGgPGwE4 / LXQ 
HWUonCkrsWAkKdjErxMLs4KxQXSPRJDo17b / Hs3ybtrY8Z9Ddt3Gng + aEQIDAQAB 
o3cwdTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH / BAUwAwEB / zAdBgNVHQ4EFgQU 
CL4jh7rursWj25gqcta4lQJpzpAwHwYDVR0jBBgwFoAUCL4jh7rursWj25gqcta4 
lQJpzpAwEgYDVR0RBAswCYIHc3VmLmNvbTANBgkqhkiG9w0BAQsFAAOCAgEA1YpO 
nToJOgNt2UYNRL / p9rxPO7a3eWnqYnH065kt + ygAJUaagVULUWOMGjkO4lAhFbMg 
TKn1kzoLWvYAqv5urK8YmIx3G9EitLdX2D7pUU4XvNI0aJwrbVR4fa1zMaFedQJ7 
r7ml8gpddArYRbpH3I4PexiYLBUxi2e2sBxpCgBdRI4YQ38jF8W6nso5x + 1YLLax 
GRj6 / NykYYG6ON6t65TMLOQnBqEAEkWxbczmq2LMd8D7ufYBMJg1hChM8KpcD6Sq 
5uoD5PaGkeYsdX6Gdd8RtWVDG0bi5hUqvCkxpvXakbOmo4DMc + WW / mc0LL5mlecd 
9HX1cs9ZBjJEQ5ADul6GGOpeqxsWdE543OnNsy6HjnXYJhHPbu342c + jlXccCpnA
KfmpZdFU58KYzaHAKudV9PWlyloUk0X3gIqSqHX7bX7 / 8E3MtTivJKxl9zIaI / YP 
EgYHLwZQ10ODi2tlSs1zJ6KYYFyrtVSqdysnTAg2WtH3uFtWOf181VMs3BpgdyUk 
6EPbdyluZ27nzA2 / OFVECAUwfjVPIx98Y6g1CYa3cTjOMJcmoiNDL6ciptfDDsVt 
iePV5Ybos0fUD7 / IyUHGSNnvyXDiCrFfTCFdveqiU6vkKj6oPQI2WPIKrZPsymnC 
DbUog0VYDpC / M10Dix9s51lfdKyvar7uDuJ6ONw = 
----- END CERTIFICATE -----</span>
  • 將Root簽名證書匯入中間CA.

現在我們有了一個Root CA簽名證書,我們需要將它匯入我們的中級CA後端。

<span style="color:rgba(0, 0, 0, 0.84)">vault寫interca / intermediate / set-signed \ 
certificate = <a data-cke-saved-href="http://twitter.com/mycertreq" href="http://twitter.com/mycertreq" class="markup--anchor markup--pre-anchor">@mycertreq</a> .crt</span>
<span style="color:rgba(0, 0, 0, 0.84)"><strong><em>成功!寫入的資料:interca / intermediate / set-signed</em></strong></span>
  • 驗證簽名是否成功
<span style="color:rgba(0, 0, 0, 0.84)">curl -s <a data-cke-saved-href="http://127.0.0.1:8200/v1/interca/ca/pem" href="http://127.0.0.1:8200/v1/interca/ca/pem" class="markup--anchor markup--pre-anchor">http://127.0.0.1:8200/v1/interca/ca/pem</a> | openssl x509 -text</span>

  • 配置證書吊銷

我們需要做的最後一件事就是設定CA和CRL的URL,就像我們對根CA一樣。

<span style="color:rgba(0, 0, 0, 0.84)">vault寫interca / config / urls issuing_certificates =“ <a data-cke-saved-href="http://127.0.0.1:8200/v1/interca/ca" href="http://127.0.0.1:8200/v1/interca/ca" class="markup--anchor markup--pre-anchor">http://127.0.0.1:8200/v1/interca/ca</a> ”\ crl_distribution_points =“ <a data-cke-saved-href="http://127.0.0.1:8200/v1/interca/crl" href="http://127.0.0.1:8200/v1/interca/crl" class="markup--anchor markup--pre-anchor">http://127.0.0.1:8200/v1/interca/crl</a> ”</span>

我們的中間CA現已配置並準備頒發證書。

  • 請求Web伺服器的證書

現在我們已經配置了CA,我們想要頒發證書。這樣做需要兩個步驟:

  • 我們需要配置一個角色。一個角色是對映到一個邏輯名稱策略用來產生這些憑據。我們的角色將定義我們生成的證書的約束,例如:金鑰型別,強度,允許的證書型別等。
  • 我們需要使用我們建立的角色申請證書。

roles/:nameendpoint允許我們建立或更新角色定義。我們用它來建立角色名稱test_server 。

<span style="color:rgba(0, 0, 0, 0.84)">保險庫寫入interca / roles / test_server \ 
key_bits = 2048 \ 
max_ttl = 4380h \ 
allow_any_name = true</span>

前往Vault的角色文件,瞭解其他可用選項。

現在,我們可以使用此角色頒發證書,

<span style="color:rgba(0, 0, 0, 0.84)">保險庫寫入interca / issue / test_server \ 
common_name =“your_server_hostname”\ 
ttl = 720h \ 
format = pem</span>

它將生成一個新證書,並輸出issuing_ca和一個需要由依賴方(我們的test_server)使用的私鑰

恭喜,您剛剛發出了第一份證書!

下一步是什麼?

我們需要在Web伺服器上部署此證書,並使用本地瀏覽器對其進行測試。

我將在我為本指南建立的nginx伺服器上部署它。

以下是我們要做的事情:

  • 在單個檔案中儲存certificate issuing_ca 生成證書。
  • 儲存private_key 在單獨的檔案中
  • 證書private_key移動到nginx伺服器中/etc/nginx/cert/
  • 配置nginx以使用此證書。

儲存的證書生成的私鑰/etc/nginx/cert/key :

<span style="color:rgba(0, 0, 0, 0.84)">----- BEGIN RSA私鑰----- 
MIIEpAIBAAKCAQEAxOQ + LLtHQI3 / 8FJDQOjb1K5fEFER8rJjBEGgFeHYYrXN9kKh 
ZfiRVybYgLUXqedn3NJkTANiwlyrRIjW5Dk1qwgA34SlXXEpRubk86Dxpj1s5Mv5 
qUA9G1P2PgvBmP02 / pBX1blfSLCwUaqx9HHhvimDiNVWWImN5Z7PWNqvqy5ojNmG 
akLjTCAVqenpLEWOd7KdCY5u127i6ehMsazzjiYH1YYV0gnlP555Ay / iWXF7nJXJ 
If42oO8z0olum2nj + YXE604HDr43sKVyhB1r27fqMvD5GiMHt3RZIWmmstwaOO /米
8aZk2E / LX69x27SE21Szkh6JbYHgbId48LvlOQIDAQABAoIBAQCvvpOI1fm5s4Za 
evMxAykF5EdShyqgGX6sk + 9S2O6O3XzkbYEnRgJlanUiHYLr03Qv9VQ1TWhf2Nu / 
Ju25dR9kdJZi7UG18IZJlVuT43sPShDjAPbujjp9JCrOIyxBZPQrsafVS8uzVJNt 
shF6AhTf6qpP / y09hjq0VVb7FuhqwERSyUaKJGLxeKbsQEUnBt8I4ZvGeVXZkgFn 
SHZ + F8LVQ7LSwRUdr + jMYSOGni3rhx2YWqGFBqcAlG3mx232BlOWwRXSAb6YzYS3
JlhLjkXxxeBIjFlBtYDbkmp + o3kajEmR41CZwY1uBxyGzca204yyj3L + JHgJlNfv 
GCTwrB8hAoGBAMdzS2DIMI / EL / GLQtCJ5PnLvzZeyMFFUsnd7NRRR7YeRCyx / jYO 
Q16lav3g583WRgWUTNgoBjAgjAN41adgWMlUI1uHj4kWh / Z6ZPOvou37DpddwHAp 
PPRXBvHOsHlnKz7OsL6nhKp5pUJDIor3cIbpaHdqmePgJ3R2WRkbvdy1AoGBAPy3 
OTCnq0mxouzli + 5oJ + 0Lzf2Blky2Wq6nTbmNsmx1mqDYeGQ / O50fAIiR6VLrJOjJ 
sf0VIrp480ut0OutoouFfxCMMOa5n20Vv98 / TKqIRXd + r75iFPgAyuxP0VN3Bt3k 
JZJmQK4ggQU2cpFlLdd1xxC6AFOaVoUvumMMoHz1AoGACMuSxV / OlGhoXNRxS9To 
3gMYGYOwgqVV80TwDqTO7r8C7p2iwit62Q + eWjeywSbzy4cwpE + PhkvJINYRReI / 
yBEHxh + COt9de4cGMKDMJIZvrEkcFVYcNAIqcjtVGOVtyMVAkge9F + 9pVDS1rz8e 
HTTpwGpZAu19j + swHqVUiAkCgYBSeEyOhzkLrI + ZtXNL0uusnNyVLRPqZtwDARAJ 
TKd8Y4iZkur + 8 ++ 1X6eh6dP1vkzmNuQBzkLuDYiAGvIB50ETPPZxZP6UXOEdDSr3
ZMXVJPFehJY / J + x93mxaX9XU4hP4l3p3Yy0aZfsUw2bx8c3a8VGMMNbocYZoomG1 
7yn0fQKBgQC9BFfo0UdODFyRjALG0OlSThikXAGtXPxfBXI20wZRcOTouXwRy2sm 
M4HZVmoIkeuLKewXgbO5MFR5jhlVCz2CZAcY1tPMyjHi0jWnPW / 8IVTQfifp7n / s的
bsH08 + Nh4zmp4VsdXyuyB8Col / FkFc2B5fNRkSP9mExEvaoibOx7ig == 
----- END RSA私鑰-----</span>

certificate其次是issuing_ca 證書儲存在/etc/nginx/cert/ssl_cert :

<span style="color:rgba(0, 0, 0, 0.84)">----- BEGIN CERTIFICATE ----- 
MIIEbDCCAlSgAwIBAgIUZdZvZtcKcIBMaESNdZnBbDLFA3AwDQYJKoZIhvcNAQEL 
BQAwADAeFw0xODA4MDUwMzMyNTBaFw0xODA5MDQwMzMzMjBaMBExDzANBgNVBAMT 
BnVidW50dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMTkPiy7R0CN 
// BSQ0Do29SuXxBREfKyYwRBoBXh2GK1zfZCoWX4kVcm2IC1F6nnZ9zSZEwDYsJc 
q0SI1uQ5NasIAN + EpV1xKUbm5POg8aY9bOTL + alAPRtT9j4LwZj9Nv6QV9W5X0iw 
sFGqsfRx4b4pg4jVVliJjeWez1jar6suaIzZhmpC40wgFanp6SxFjneynQmObtdu 
4unoTLGs844mB9WGFdIJ5T + eeQMv4llxe5yVySH + NqDvM9KJbptp4 / mFxOtOBw6 + 
N7ClcoQda9u36jLw + RojB7d0WSFpprLcGjjv5vGmZNhPy1 + vcdu0hNtUs5IeiW2B 
4GyHePC75TkCAwEAAaOBzDCByTAOBgNVHQ8BAf8EBAMCA6gwHQYDVR0lBBYwFAYI 
KwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBQiuugAzw + S17dbCofdj3WVcZvC
PzAfBgNVHSMEGDAWgBQ2t80LsdTqSoYnYlrRBqk8B0cfEDA / BggrBgEFBQcBAQQz 
MDEwLwYIKwYBBQUHMAKGI2h0dHA6Ly8xMjcuMC4wLjE6ODIwMC92MS9pbnRlcmNh 
L2NhMBcGA1UdEQQQMA6CBnVidW50dYcEwKgvhTANBgkqhkiG9w0BAQsFAAOCAgEA 
xmI2xYGuOpe + YKR / rKGDvIGURDUGAY0kvxLleE4arSKPOWG11jFlv7 + MLl1c14 + T 
R7CV3 + NFsScJoZf6nppecz6O + VSRzbsGqHY2b4LlMmGFrLQJO + VhpqAgG0DGIE60 
BLKL左張力感測器+ IhMOpZLoO9ATjvAMYCKm2rXMgrPHO0PCZwSys9Cti / r0xR7l2fPVYRCcyrp 
eHG0UjncbEmZ9ymzz6mi9sC1ICCcgra + UsV9K9ez3C / MKmQN2UkwZd814zS9Gi0Q 
JrlxPN + QO1NdToowyT7JpEod615OkaRv8p5LnGsvdNghnmnCpmI3qh0XvexT + YUX 
LkHBXX9jWvNL528VXgL59en9EN4lE82 / TkwfdTvMEb2YmqqsmklrRTNlJM1UJLYX 
一個+ oO6FoUDGDo3bl7YNh7r0W5huXeHurmP4ZSsn8H2LSYCiVglyUgUjyv8GYPJDLR 
b5CiN8LCMJJH7TZ2frX7SKAr / TsqIEK5eFqYG / 0rwjihWcBYckvW0ectINeLZC8z
SeDGFG7CeB5LLeLY6V9cPycgMq0uwOANsitCZCEDc3LM9lWg8I73PFvwTxuET + F / 
Q1wrGSyAZ6ly8oB8e8pMlxoyjVU7DGU + jiM4xkD2ane5laRKbOtHmlF9rxqUD1lw 
wmUdBMdXOMVvd + kNMlv6qv9MH / yHN7RRgjtFQ71Meis = 
----- END CERTIFICATE ----- 
----- BEGIN CERTIFICATE ----- 
MIIFhzCCA2 + gAwIBAgIUTC8C3fVWCveITXkHOQS + mUcjlcEwDQYJKoZIhvcNAQEL 
BQAwEjEQMA4GA1UEAxMHc3VmLmNvbTAeFw0xODA4MDUwMjI3MjdaFw0xOTA4MDUw 
MjI3NTdaMAAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDtDiRPdl4T 
BFTrK0OS6C4wbr / zMhcPwg1XZEwr57GvaAeDxNK2EB2lgX41d6J + xbdBT / R + Yjg9 
FzQX5R97l3Or2J7oV4j6zSYF87hs4gs7aWXkNur9qMuYWU6GEQEOTwv1aF4Uc5NW 
wK1W6NbElcFGujRZ0Fv3JnV6G + F / SONE8s8y1jJZCHnsoaQKHHq8xcFnwLOnUVvS 
FbHwZoQYdYZHqg4jqovc / Z9sa + lVvLzwpsTDuYe1FBcF9ZLPrTP6QtLwr / 9HseF /
kgnqViXGIpRf78tda + F8HGuMGh0I37Z7CU66JX8s3 / OcfmUUX6DqHb3oXaLpdPJO 
EOhmcds2fhg / Bjhinj0K6f4uomihkfRr1DdOzc8xZ0EEfyuJ66KXZi4XyYvwU1Gm 
oua8HTV7fL64zBTawaqEWbqBNPSRiPpJsciSkN8YfVhrYb6LIhWpDmXlW9iD8uyf 
wDDMmqUwzQKyHUjsRsSfLfbHWcgKTia / umea9YyJw0IBk8cIL6 / QS + FWer5i3689 
FJNn9Nw / OeRPxf5gz0eVRRY + URAbPQexgcjvVryHvzpZZGKJbrTGeqdtpel64tZu 
aEj6gBorAJ6ooei​​HZqgwQ1nXhlcVQv827lUYiY7zUXNq + DB812VtzHlytpo + sIez 
+ 93oPCJmZaG8S3kn02a0dGE8TO8l2Ll0GQIDAQABo4HmMIHjMA4GA1UdDwEB / WQE 
AwIBBjAPBgNVHRMBAf8EBTADAQH / MB0GA1UdDgQWBBQ2t80LsdTqSoYnYlrRBqk8 
B0cfEDAfBgNVHSMEGDAWgBQIviOHuu6uxaPbmCpy1riVAmnOkDBEBggrBgEFBQcB 
AQQ4MDYwNAYIKwYBBQUHMAKGKGh0dHA6Ly8xMjcuMC4wLjE6ODIwMC92MS9yb290 
Y2Ffc3RvcmUvY2EwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovLzEyNy4wLjAuMTo4
MjAwL3YxL3Jvb3RjYV9zdG9yZS9jcmwwDQYJKoZIhvcNAQELBQADggIBAFnUFAi6 
lqkJHPJWXof259nZ / unXjqB39ZApEZY6uy7lrhIo3M / HbWAygZjElNAdk +烏拉/ 79 
rWTRSoQu2yl91KnQmIB6ZuaPtgAMpMbm3acAtmrnD7ibZKxSSA3WXb1cQi0b9eFf 
wR6uUfZuB7cGgtvT + 9p44LpxLHHHzYy1c2AMifArJtR0HmhUZbZy30uHf + kxcSsk 
NFsVp3xJLjtL6giZv5hv5TubGo + i4BYFoQ / fOLmI2zo4dFJwHtSRwyxomYl92egH 
ZgmRyKjtqNqlmbFfSl3K ++ M3oAmbTIys9Rel1sSqStUPxmlY0xJi02iN / ClyIdSa 
B + Q3ccBQrE9COAhEeV + zgUq4okvE7AOkP8SsJ9a3VhLijjNeb / Migm6Z + Wl6pPbP 
uYPOMLfTOTo9NBdFTT9yR9HRSHwdtWhpEX0kuZ5B4eDk586WXkIZWzEw1cEeRAzb 
kM9lSuHKo016bwRUNGlVFlDTi + zGUbxfIKD9 / tqI8Vw5OkUQI8FTXqLbe5C4XMT3 
JTSo3XKneXxuF6fpXe + eUTkU02hwhIJOM1w33riZmf5QoCwTcttDaY3W / 5aN8pIs 
+ r5lPwtKjz5mQWVJT4xDuRs5bfUNjRq + MREVUdORwdtRfEUfb8uMIEuMRX8Wr2kB
Xn8kPbKGYxJhp2A5WVy5 / E6DW5DFG6by6syT 
----- END CERTIFICATE -----</span>

這就是我的nginx.conf樣子,

<span style="color:rgba(0, 0, 0, 0.84)">http { 
include /etc/nginx/mime.types; 
default_type application / octet-stream; 
server { 
listen 443 ssl default_server; 
server_name test_server; 
ssl on; 
ssl_session_timeout 5m; 
ssl_certificate / etc / nginx / cert / ssl_cert; 
ssl_certificate_key / etc / nginx / cert / key; 
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
ssl_ciphers HIGH:!aNULL:!MD5;</span>
<span style="color:rgba(0, 0, 0, 0.84)">location / { 
root / usr / share / nginx / html; 
index index.html index.htm; 
} 
} 
的access_log /var/log/nginx/access.log; 
error_log /var/log/nginx/error.log;</span>
<span style="color:rgba(0, 0, 0, 0.84)">include /etc/nginx/conf.d/*.conf; 
包括/ etc / nginx / sites-enabled / *; 
}</span>

Web伺服器現在使用我們自己的根CA頒發的證書!

測試

您的根CA證書必須在本地瀏覽器中可用,才能執行身份驗證。

從Vault伺服器,訪問並儲存檔案中的Root證書,比方說root.crt

<span style="color:rgba(0, 0, 0, 0.84)">curl -s <a data-cke-saved-href="http://127.0.0.1:8200/v1/rootca_store/ca/pem" href="http://127.0.0.1:8200/v1/rootca_store/ca/pem" class="markup--anchor markup--pre-anchor">http://127.0.0.1:8200/v1/rootca_store/ca/pem</a></span>

然後在您的本地瀏覽器中(我使用的是谷歌瀏覽器),轉到Settings- >點選Advanced頁面底部的,然後選擇Manage certificates ,

接下來,單擊Import並選擇之前儲存的根證書檔案,單擊NextFinish。您應該收到以下訊息:

現在訪問您的Web伺服器,您應該看到您的連線是安全的。

您的伺服器正在使用您自己的根CA頒發的證書。