Vault部署及创建密钥管理服务

安装

源码编译安装(需要Golang和Git环境,具体步可骤参见网上)

  • 源码下载到GOPATH
git clone https://github.com/hashicorp/vault 
  • 进入代码目录,编译(因为编译需要安装相关库,所以需要使用代理)
cd $GOPATH/src/github.com/hashicorp/vault/  
make dev  

预编译的Vault二进制安装

  • 下载预编译二进制包
wget https://releases.hashicorp.com/Vault/1.1.3/Vault_1.1.3_linux_amd64.zip
  • 解压到环境变量路径
unzip Vault_1.1.3_linux_amd64.zip -d /usr/local/bin  

这里建议直接使用预编译的二进制包安装,简单快捷。


启动Vault

  • 编辑配置文件
    编辑配置文件vault.hcl,如下。配置中需要配置存储密钥的数据库相关信息,这里用的MySQL,官网上还支持其他数据库,具体信息参见vault官方文档
disable_mlock = true
ui = true
backend "mysql" {
    address = "192.168.23.225:3306  "
    username = "root"
    password = "123456"
    database = "vault-test"
    table = "vault"
}
	listener "tcp" {
	    address = "0.0.0.0:8200"
	    tls_disable = 1
	}
	api_addr = "http://192.168.23.225:8200"  
  • 启动Vault
#启动Vault服务  
vault server -config=vault.hcl  
#设置访问地址设置成http  
export VAULT_ADDR=http://127.0.0.1:8200  

  • 初始化
vault operator init -key-shares=5 -key-threshold=3  
# -key-shares:指定密钥的总股数,  
# -key-threshold:指定需要几股可解锁  
# 以上参数为默认,可不设置。  

初始化的Vault会返回5个密钥,根据我们设置的启动参数,正确输入其中的3个密钥就可以解封数据库。Root Token是用作首次访问Vault使用。

Unseal Key 1: O2h1reLoykkEDPVptQ7xr4M6zpSLwexYvRxSbIsRqIRX  
Unseal Key 2: xo5sQSE2MoiUbT4s/9WvmEF18K9HWy2ARwS1wW4VnX2c  
Unseal Key 3: jm6BkWMnZlYGf2R5van32UJdB8nzE6uemyYz4JrsMH/2  
Unseal Key 4: B6qEyjN26sookmCbmh0ZJr/B/4Ik7FdALaFmF4pylDGh  
Unseal Key 5: Zw+JnaM7biiLlA094o2pAIXWrEM37sV7BF9flg8DFe8K  
  
Initial Root Token: s.MWnxEObtfY6Knkk8tkDZs5yz  
  
Vault initialized with 5 key shares and a key threshold of 3. Please securely  
distribute the key shares printed above. When the Vault is re-sealed,  
restarted, or stopped, you must supply at least 3 of these keys to unseal it  
before it can start servicing requests.  
  
Vault does not store the generated master key. Without at least 3 key to  
reconstruct the master key, Vault will remain permanently sealed!  
  
It is possible to generate new unseal keys, provided you have a quorum of  
existing unseal keys shares. See "vault operator rekey" for more information
  • 解封
    数据初始化的时候获取的5个密钥中的3个对Vault进行解封操作:
vault operator unseal  
#分别输入5个中的3个密钥  
Unseal Key (will be hidden):   
Key                Value  
---                -----  
Seal Type          shamir  
Initialized        true  
Sealed             true  
Total Shares       5  
Threshold          3  
Unseal Progress    1/3  
Unseal Nonce       4bd56e46-40c1-baf9-ce13-b47386f35d78  
Version            1.1.2  
HA Enabled         false  

成功解封后,一个可用的Vault服务就启动了

创建CA签发引擎

  • 登录

使用Root Token登录Vault

vault login s.MWnxEObtfY6Knkk8tkDZs5yz 
  
Success! You are now authenticated. The token information displayed below  
is already stored in the token helper. You do NOT need to run "vault login"  
again. Future Vault requests will automatically use this token.  
  
Key                  Value  
---                  -----  
token                s.MWnxEObtfY6Knkk8tkDZs5yz  
token_accessor       kVlLumxoJUyBH7ORZ0oNJgH7  
token_duration       ∞  
token_renewable      false  
token_policies       ["Root"]  
identity_policies    []  
policies             ["Root"]  
  • 创建Root CA

在创建根CA之前,我们需要先在Vault创建一个路径来存放Root CA

#创建存放证书路径  
vault secrets enable -path=test -description="MQTT CA" -max-lease-ttl=87600h pki  

Success! Enabled the pki secrets engine at: test /  
#查看已经创建的引擎  
vault secrets list

Vault中的每个secret引擎都需要定义路径和属性。对于用户来说,secret引擎的行为类似于虚拟文件系统,支持读、写和删除等操作,当然具体取决于使用角色分配给它们的权限。

 #创建Root CA 填写相关证书信息  
vault write test/Root/generate/internal \  
common_name="test.com" \  
ttl=87600h \  
key_bits=4096 

执行成功后会返回certificate就是我们的Root CA。更多的证书申请参数参见官网文档: Vault PKI证书介绍

  • 创建角色
#创建role  
vault write test/roles/test_server \  
key_bits=2048 \  
max_ttl=8750h \  
allow_any_name=true  

参数的test就是我们刚刚存放Root CA的路径,test_server就是我们创建角色的名称。

  • 签发证书
    那么就下来就用刚刚申请的角色签发一个证书。
#签发证书  
vault write test/issue/test_server \  
common_name="test.com" \  
ttl=8660h \  
format=pem  

因为返回结果比较长,就不在文中贴了。执行成功后,会返回一个我们新签的CA证书,还有我们的Root CA,还有就是新颁发CA的私钥。
当然颁发证书的接口我们也可以通过HTTP接口获得:
定义请求参数 payload.json:

{  
  "common_name": "iot-sdk.intra.nsfocus.com",  
  "ttl":"8000h",  
  "format":"pem"  
}

使用curl向Vault服务器发起POST请求,X-Vault-Token就是Vault的Root Token:

curl --header "X-Vault-Token: s.MWnxEObtfY6Knkk8tkDZs5yz" --request POST  --data @payload.json  http://192.168.23.225:8200/v1/test/issue/test_server  
{  
    "auth": null,  
    "data": {  
        "certificate": "-----BEGIN CERTIFICATE-----\nMIIEXjdCzwN6h2...\n-----END CERTIFICATE-----",  
        "expiration": 1589711650,  
        "issuing_ca": "-----BEGIN CERTIFICATE-----\nMIIFLDCCAxSgAwI...\n-----END CERTIFICATE-----",  
        "private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAA...\n-----END RSA PRIVATE KEY-----",  
        "private_key_type": "rsa",  
        "serial_number": "76:e8:f1:49:91:58:8e:e3:6a:bc:b3:2d:ae:1c:bb:de:0c:27:a0:a6"  
	    },  
	    "lease_duration": 0,  
	    "lease_id": "",  
	    "renewable": false,  
	    "request_id": "08d5fd69-bc93-5b10-9bc7-94ff47440b3b",  
	    "warnings": null,  
	    "wrap_info": null  
	}
  • 证书校验
    接下来,用Root CA验证一下我们新签发的CA证书:
  1. 将我们的Root CA存储到ca.crt中
  2. 签发CA存储到server.crt中
  3. 使用openssl命令进行校验,返回OK就证明申请的证书校验通过
#使用openssl校验证书
openssl  verify -CAfile ca.crt  server.crt  
server.crt: OK

综上,一个完整的使用Vault签发CA证书的流程就完成了。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值