使用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 =@signing_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颁发的证书。

猜你喜欢

转载自blog.csdn.net/andychuen/article/details/83786369