使用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接受HCL和JSON作為其配置,並且必須提供-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>
-path
rootca_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_certificates
url,它指定了Issuing Certificate欄位的值。二者issuing_certificates
並crl_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/:name
endpoint允許我們建立或更新角色定義。我們用它來建立角色名稱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
aEj6gBorAJ6ooeiHZqgwQ1nXhlcVQv827lUYiY7zUXNq + 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
並選擇之前儲存的根證書檔案,單擊Next
和Finish
。您應該收到以下訊息:
現在訪問您的Web伺服器,您應該看到您的連線是安全的。
您的伺服器正在使用您自己的根CA頒發的證書。