vault安装及springboot,springcloud整合vault

时间:2019-05-15
本文章向大家介绍vault安装及springboot,springcloud整合vault,主要包括vault安装及springboot,springcloud整合vault使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

 

Hashicorp Vault

Vault概述

Vault是安全访问秘密的工具。一个秘密是你想要严格控制访问的任何东西,如API密钥,密码,证书等等。Vault为任何秘密提供统一的界面,同时提供严格的访问控制和记录详细的审核日志。

Hashicorp Vault解决了管理敏感信息的问题 —— 在Vault的用语中使用“secret”。在这种情况下,“管理”意味着Vault控制敏感信息的所有方面:它的生成,存储,使用以及最后它的撤销。

Hashicorp提供两种版本的Vault。本文中使用的开源版本可以免费使用,即使在商业环境中也是如此。同时还提供付费版本,其中包括不同SLA的技术支持和其他功能,例如HSM(硬件安全模块)支持。

HashiCorp Vault是一个私密信息管理工具(A tool for managing secrets),提供键值的方式保存私密信息。

秘密信息:如数据库用户名密码、ssl证书、用户敏感信息等。

特性:

1、安全的私密信息存储

2、动态的私密信息支持

3、提供对于私密信息的更新,延长有效时间的功能

4、灵活的权限控制

5、多种客户端登录验证方式

 

安装要求

JDK1.8+

mysql5.6

vault_1.1

redhat/centos7

openssl

 

 

安装步骤

  1. 下载安装包

最新版本:https://www.vaultproject.io/downloads.html

历史版本:https://releases.hashicorp.com/vault/

  1. 解压缩文件
  2. 生成证书
  3. 配置vault连接
  4. 启动vault
  5. 访问页面初始化/解锁/登录
  6. 开启秘钥引擎,增加测试数据验证

 

安装参考:

https://blog.csdn.net/zrk1000/article/details/72670037

https://blog.csdn.net/fenglongmiao/article/details/82776696

 

安装过程:

https://learn.hashicorp.com/vault/#getting-started

 

 

windows安装及部署Vault

openssl客户端安装

  • 下载地址:

http://slproweb.com/products/Win32OpenSSL.html

  • 软件安装与运行

直接点击安装,傻瓜式,点击下一步,知道完成即可。

将当前目录配置到windows环境变量中,以后就可以在任意位置使用openssl命令了。

打开cmd命令行测试:

 

openssl生成证书

生成证书

  1. 将bash压缩包解压到到valut安装目录

可以进入到bash目中查看,该目录中只有openssl.cfg配置文件

 

  1. 进入H:\Program Files\vault_1.1.1_windows_amd64\bash\work\ca\server目录,修改openssl.cnf配置文件,绑定域名或者ip地址。

我这里域名绑定为vault.dragon.com,如果是自定义域名,则修改在C:\Windows\System32\drivers\etc文件配置映射。

 

  1. cmd命令行进入到bash目录,执行create_certificates.sh 文件即可。

这里提示输入,都输入y生成证书。查看生成证书如下:

可以看到创建完成后会在work目录生成相应的证书,将根证书work/cas/root/key/cacert.crt 拷贝到本地,在浏览器中安装,并将该证书安装到本地jdk证书库。

 

导入自建CA的根证书

这里以Firefox为例,打开:选项 -> 隐私与安全 -> 查看证书,在证书颁发机构里面选择导入,选择文件 work/ca/root/key/cacert.crt 导入并勾选2个信任的复选框

 

Google: 安装及查看证书,设置-》高级-》安装证书-》双击该选项-》个人选项》导入证书即可。

360: 设置-》安全设置-》https证书管理-》个人》导入证书即可。

 

导入详细过程:

 

选择当前用户即可。

导入完成后,进入浏览器查看安装的证书详情。

 

注意:

1、这里安装的证书都是PKCS12类型,文件是已xxx.p12结尾证书才可以导入,如果不是该类型,则需要自行转换。

2、服务端:需要安装服务器端证书,客户端直接安装客户端认证。为了能很好的测试,我们将服务端,客户端全部安装到浏览器

 

 

安装证书到jdk库中。

1、删除原来的证书

#keytool -delete -alias vault.datu1.com -keystore "H:\Program Files\Java\jdk1.8.0_92\jre\lib\security\cacerts"

如果这里没有删除的证书,会提示找不到该证书,删除时需要输入密码,默认是changeit.

这里删除,主要是为了方式同名的冲突,证书不起作用。

注意:我这里的jdk在h盘符安装,如果盘符目录有空格,使用双引号包含路径,负责执行提示路径错误。

 

2、客户端导入证书

keytool -import -keystore "H:\Program Files\Java\jdk1.8.0_92\jre\lib\security\cacerts" -file work/ca/root/key/cacert.crt -alias vault.dragon.com

cmd命令进入到bash目录,导入如下:

默认密码是changeit,可以在生成证书的脚本(create_certificates.sh)中查看。

 

3、查看证书

keytool -list -keystore "H:\Program Files\Java\jdk1.8.0_92\jre\lib\security\cacerts"

 

 

配置nginx的ssl(备注配置nginx使用)

 

server {

         listen       443 ssl;

         server_name  server2018.cn bbs.server2018.cn server2019.cn;

 

         ssl_certificate      work/ca/server/server_all.crt;

         ssl_certificate_key  work/ca/server/privkey.pem;

 

         ssl_session_cache    shared:SSL:1m;

         ssl_session_timeout  5m;

 

         ssl_ciphers  HIGH:!aNULL:!MD5;

         ssl_prefer_server_ciphers  on;

 

         location / {

                   root   html;

                   index  index.html index.htm;

         }

}

 

 

 

以ssl认证启动vault服务

下载解压缩文件

下载vault_1.1.1_windows_amd64.zip压缩包后,解压缩即可。

 

 

设置环境变量

我的电脑-》右键属性-》高级系统设置-》高级-》环境变量-》系统变量-》path-》编辑环境变量-》添加vault安装目录-》确定。

 

通过命令行测试vault配置是否正确:

cmd命令行,执行vault查看如下,表示vault路径配置正确。

 

 

创建vault数据库及表

通过mysql客户端创建库名为vault,表名称为vault。

  • navicat客户端连接mysql:

连接-》mysql-》填写mysql连接地址、用户名、密码-》点击测试,提示连接成功即可。

 

  • 新建数据库:

选中新建的连接-》右键-》新建数据库-》填写库名为vault, 选择编码为UTF-8.

表不用创建,启动vault服务会自动创建。

 

创建ssl证书

参考《openssl证书生成》

 

注意:这里使用的是openssl 创建证书,通过keytool导入到jdk证书库,

并将生成的证书导入到客户端浏览器及jdk证书库,要不然浏览https访问不了。

 

配置vault服务启动数据库连接,ssl认证

# vault.hcl文件如下

# 开启图形界面管理

ui=true

 

#数据库存储

storage "mysql" {

    address = "localhost:3306"

    username = "root"

    password = "root"

    database = "vault"

    table = "vault"

}

 

#监听地址及端口

listener "tcp" {

  address = "localhost:8200"

#  tls_disable = 1

  tls_cert_file = "bash/work/ca/server/server.crt"

  tls_key_file = "bash/work/ca/server/privkey.pem"

  tls_min_version = "tls10"

}

 

#api_addr = "https://localhost:8200"

 

启动vault服务

进入vault根据目录中,执行命令:vault server -config=ssl.hcl

以上命令启动是在控制台,不能关闭控制台,为了方便操作,使用后台进程启动,使用命令: nohup vault server -config=ssl.hcl &

 

控制台启动:

 

初始化/解锁/登录vault

以命令行初始化/解锁/登录vault

  • 初始化vault

执行命令:vault operator init -tls-skip-verify

注意:这里-tls-skip-verify表示需要以跳过认证方式初始化,由于以ssl认证启动服务,所以这里操作命令都需要认证,所有命令都增加该参数进行操作。具体追加参数位置可以通过help命令查看选项。

#注:初始化后一定要记录key和token 到固定位置文件中,后续登录及解锁都会使用。

 

  • 解锁

解锁命令:vault operator unseal -tls-skip-verify

注:解锁需要输入3个不同的key才可以,并且只有当Sealed 为false才可以使用,表示已经解锁

 

  • 登录

执行命令:vault login -tls-skip-verify -method=token  s.iSTQL6feKIFPEiJizNHEUlM2

 

登录ui测试:

以上表示vault安装成功,具体操作可以直接在图形界面使用。

 

以ui页面初始化/解锁/登录vault

vault服务启动后,如果没有在命令行进行初始化解锁,可以在ui界面访问vault服务进行初始化解锁。操作如下:

  • 启动vault服务:
  • 浏览器访问vault服务如下:

https://vault.dragon.com:8200

这里需要设置一组在紧急情况下需要使用的主钥匙。

key shsares: 表示生成key的个数,默认是5个key(必填项)。

Key threshold: 表示解锁时key的阈值,默认是3个不相同的key才能满足解锁条件(必填项)。

Encrypt output with pgp: 表示可以指定加密key的方式,可以自己编写加密规则,支持上传文件,文本直接输入。按照给定的加密顺序进行加密key. (可选的,一般不知道,使用默认加密方式)。

Encrypt root token with pgp: 表示可以指定加密token规则,可以自己编写加密规则,支持上传文件,文本直接输入(可选的,一般不知道,使用默认加密方式)。

填写完成后,点击初始化,初始化完成如下。

注意,这里需要保存生成的key,token,后续登录/解锁都需要使用,也可以直接点击《眼睛小图标》查看明文,点击download key 下载到本保存。如果忘记保存怎么办?需要将连接mysql数据库表清空,重启服务,重新进行以上操作。

json文件格式如下:

 

保存完成,点击解锁(continue unseal)。

将保存文件中keys_base64对应的key填写到文本框即可解锁。

将保存文件中root_token对应的token值填写到文本框即可登录。

恭喜你,以上表示对vault服务操作成功,接下来可以进行其他操作了。

 

开启秘钥引擎

我们这里使用kv秘钥引擎进行加密解密存储操作。

选择enable new engine

选择kv引擎,点击next.

设置版本为1.点击enable engine.

选择create secret添加秘钥。

秘钥设置完成,点击保存即可。

以上秘钥引擎设置就完成了。

 

启动/关闭vault服务

  • 启动:

进入到vault安装目录,执行命令 vault server –config=xxx.hcl

 

  • 关闭:

查看进程: netstat -ano | findstr 8200

结束进程: taskkill  /F /PID  [进程号]

例如结束进程号为123,则执行命令:taskkill  /F /PID 123

 

 

linux安装及部署Vault

openssl生成证书

生成证书

  1. 将bash压缩包解压到到valut安装目录

可以进入到bash目中查看,该目录中只有openssl.cfg配置文件

 

  1. 修改文件权限

chmod 755 -R bash

 

  1. 进入bash/work/ca/server目录,修改openssl.cnf配置文件,绑定域名或者ip地址。

 

我这里域名绑定为vault.dragon.com,如果是自定义域名,则修改在C:\Windows\System32\drivers\etc文件配置映射。

 

  1. cmd命令行进入到bash目录,执行create_certificates.sh 文件即可。

这里提示输入,都输入y生成证书。查看生成证书如下:

可以看到创建完成后会在work目录生成相应的证书,将根证书work/cas/root/key/cacert.crt 拷贝到本地,在浏览器中安装,并将该证书安装到本地jdk证书库。

 

导入自建CA的根证书

将linux中生成的证书下载到本地,这里以Firefox为例,打开:选项 -> 隐私与安全 -> 查看证书,在证书颁发机构里面选择导入,选择文件 work/ca/root/key/cacert.crt 导入并勾选2个信任的复选框

 

Google: 安装及查看证书,设置-》高级-》安装证书-》双击该选项-》个人选项》导入证书即可。

360: 设置-》安全设置-》https证书管理-》个人》导入证书即可。

 

 

 

安装证书到本地jdk库中。

1、删除原来的证书

#keytool -delete -alias vault.datu1.com -keystore "H:\Program Files\Java\jdk1.8.0_92\jre\lib\security\cacerts"

如果这里没有删除的证书,会提示找不到该证书,删除时需要输入密码,默认是changeit.

这里删除,主要是为了方式同名的冲突,证书不起作用。

注意:我这里的jdk在h盘符安装,如果盘符目录有空格,使用双引号包含路径,负责执行提示路径错误。

 

2、客户端导入证书

keytool -import -keystore "H:\Program Files\Java\jdk1.8.0_92\jre\lib\security\cacerts" -file work/ca/root/key/cacert.crt -alias vault.dragon.com

cmd命令进入到bash目录,导入如下:

默认密码是changeit,可以在生成证书的脚本(create_certificates.sh)中查看。

 

3、查看证书

keytool -list -keystore "H:\Program Files\Java\jdk1.8.0_92\jre\lib\security\cacerts"

 

以ssl认证启动vault服务

下载解压缩文件

1、下载linux安装包vault_1.1.1_linux_amd64.zip

2、上传文件到linux上解压缩。

$ unzip vault_1.1.1_linux_amd64.zip

 

 

设置环境变量

 

$ vim /etc/profile

#export JAVA_HOME=/usr/local/jdk1.8.0_92

export JAVA_HOME=/usr/local/jdk1.8.0_191

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

#配置vault安装目录

export VAULT_HOME=/opt/vault_1.1.1_linux_amd64

export PATH=$PATH:$VAULT_HOME

$ source /etc/profile

$ echo $VAULT_HOME

 

创建vault数据库及表

通过mysql客户端创建库名为vault。

  • navicat客户端连接mysql:

连接-》mysql-》填写mysql连接地址、用户名、密码-》点击测试,提示连接成功即可。

 

  • 新建数据库:

选中新建的连接-》右键-》新建数据库-》填写库名为vault, 选择编码为UTF-8.

表不用创建,启动vault服务会自动创建。

 

 

创建ssl证书

 

  1. 将bash压缩包解压到到valut安装目录

可以进入到bash目中查看,该目录中只有openssl.cfg配置文件。

 

  1. 进入/opt/vault_1.1.1_linux_amd64/bash/work/ca/server目录,修改openssl.cnf配置文件,绑定域名或者ip地址。

我这里域名绑定为vault.vm.com,如果是自定义域名,则修改本地C:\Windows\System32\drivers\etc文件配置映射。

 

  1. cmd命令行进入到bash目录,执行create_certificates.sh 文件即可。

这里提示输入,都输入y生成证书。查看生成证书如下:

 

可以看到创建完成后会在work目录生成相应的证书,将根证书work/cas/root/key/cacert.crt 拷贝到本地,在浏览器中安装,并将该证书安装到本地jdk证书库。

 

注意:这里使用的是openssl 创建证书,通过keytool导入到jdk证书库,

并将生成的证书导入到客户端浏览器及jdk证书库,要不然浏览https访问不了。

 

 

配置vault服务启动数据库连接,ssl认证

# vault.hcl文件如下

# 开启图形界面管理

ui=true

 

#数据库存储

storage "mysql" {

    address = "192.168.5.111:3306"

    username = "root"

    password = "12345678"

    database = "vault"

    table = "vault_ssl"

}

 

#监听地址及端口

listener "tcp" {

  address = "vault.vm.com:8200"

#  tls_disable = 1

  tls_cert_file = "work/ca/certs/localhost.cert.pem"

  tls_key_file = "work/ca/private/localhost.decrypted.key.pem"

  tls_min_version = "tls10"

  max_request_duration=90

}

 

#api_addr = "https://172.16.102.117:8200"

 

 

启动vault服务

执行命令:vault server -config=ssl.hcl

以上命令启动是在控制台,不能关闭控制台,为了方便操作,使用后台进程启动,使用命令: nohup vault server -config=ssl.hcl &

初始完成后数据库增加如下信息:

 

初始化/解锁/登录vault

以命令行初始化/解锁/登录vault

查看进程: netstat -anput | grep 8200

结束进程:kill -9  进程号

 

  • 打开一个命令行设置变量

$ export VAULT_ADDR="http://vault.datu1.com:8200"

$ export VAULT_DEV_ROOT_TOKEN_ID="s.MlTC13p6aJuafI5jHiMZZquz "

 

 

  • 初始化vault

执行命令:vault operator init -tls-skip-verify

注意:这里-tls-skip-verify表示需要以跳过认证方式初始化,由于以ssl认证启动服务,所以这里操作命令都需要认证,所有命令都增加该参数进行操作。具体追加参数位置可以通过help命令查看选项。

#注:初始化后一定要记录key和token 到固定位置文件中,后续登录及解锁都会使用。

 

  • 解锁

解锁命令:vault operator unseal -tls-skip-verify

注:解锁需要输入3个不同的key才可以,并且只有当Sealed 为false才可以使用,表示已经解锁

 

登录ui测试:

以上表示vault安装成功,具体操作可以直接在图形界面使用。

 

以ui页面初始化/解锁/登录vault

vault服务启动后,如果没有在命令行进行初始化解锁,可以在ui界面访问vault服务进行初始化解锁。操作如下:

  • 启动vault服务:
  • 浏览器访问vault服务如下:

https://vault.datu1.com:8200

这里需要设置一组在紧急情况下需要使用的主钥匙。

key shsares: 表示生成key的个数,默认是5个key(必填项)。

Key threshold: 表示解锁时key的阈值,默认是3个不相同的key才能满足解锁条件(必填项)。

Encrypt output with pgp: 表示可以指定加密key的方式,可以自己编写加密规则,支持上传文件,文本直接输入。按照给定的加密顺序进行加密key. (可选的,一般不知道,使用默认加密方式)。

Encrypt root token with pgp: 表示可以指定加密token规则,可以自己编写加密规则,支持上传文件,文本直接输入(可选的,一般不知道,使用默认加密方式)。

填写完成后,点击初始化,初始化完成如下。

注意,这里需要保存生成的key,token,后续登录/解锁都需要使用,也可以直接点击《眼睛小图标》查看明文,点击download key 下载到本保存。如果忘记保存怎么办?需要将连接mysql数据库表清空,重启服务,重新进行以上操作。

json文件格式如下:

 

保存完成,点击解锁(continue unseal)。

将保存文件中keys_base64对应的key填写到文本框即可解锁。

将保存文件中root_token对应的token值填写到文本框即可登录。

恭喜你,以上表示对vault服务操作成功,接下来可以进行其他操作了。

 

 

开启秘钥引擎

我们这里使用kv秘钥引擎进行加密解密存储操作。

选择enable new engine

选择kv引擎,点击next.

设置版本为1.点击enable engine.

选择create secret添加秘钥。

秘钥设置完成,点击保存即可。

以上秘钥引擎设置就完成了。

 

启动/关闭vault服务

  • 启动:

进入到vault安装目录,执行命令 vault server –config=xxx.hcl

 

  • 关闭:

ps –ef | grep 8200  或者netstat –anptu | grep 8200

kill -9  [进程号]

例如结束进程号为123,则执行命令:kill -9 123

 

 

vault客户端服务部署

  1. 创建目录

[root@server95 opt]# mkdir vault_client

[root@server95 opt]# chmod 755 -R vault_client

[root@server95 opt]#

2、修改配置

修改springcloud-valut/springboot-vault.jar中vault连接配置。

注意:这里如果是以http方式连接,则scheme改为http, 如果是以https方式连接,则该scheme为https,还需要修改host连接地址及登录token 。

 

3、上传springcloud-valut/springboot-vault.jar 到linux中/opt/vault_client目录中

4、启动方式

直接运行springcloud-vault.jar/或者springboot-vault.jar即可。

命令航执行:java -jar springcloud-vault.jar ,这样启动时在控制台运行,不能关闭窗口,使用后台进程启动,则可以任意操作,执行命令:nohup java -jar springcloud-vault.jar &

以上表示启动成功。

5、浏览器测试

http://vault.vm.com:9090/read

 

 

Vault 命令行

https://www.vaultproject.io/docs/commands/

 

 

vault接口调用

修改配置

修改springcloud-valut/springboot-vault.jar中vault连接配置。

注意:这里如果是以http方式连接,则scheme改为http, 如果是以https方式连接,则该scheme为https,还需要修改host连接地址及登录token 。

启动方式

直接运行springcloud-vault.jar/或者springboot-vault.jar即可。

命令航执行:java -jar springcloud-vault.jar ,这样启动时在控制台运行,不能关闭窗口,使用后台进程启动,则可以任意操作,执行命令:nohup java -jar springcloud-vault.jar &

 

客户端提供接口服务

查询数据

接口:

http://localhost:8080/read

请求方式:

POST

参数:

 

 

 

path

String

请求路径

 

 

 

 

 

返回数据:

 

 

 

body

数据

 

 

status

状态(true-成功,false-失败)

 

 

msg

消息内容

 

 

 

 

 

 

 

 

 

 

结果格式如下:

{

  • body

{

    • account"test001",
    • id1,
    • name"test001",
    • password"test001"

},

  • footernull,
  • total0,
  • statustrue,
  • statusCode"200",
  • msg"查询秘钥成功"

}

 

 

根据key查询数据

接口:

http://localhost:8080/readByKey

请求方式:

POST

参数:

 

 

 

path

String

请求路径

 

key

String

数据名称key

 

返回数据:

 

 

 

body

数据

 

 

status

状态(true-成功,false-失败)

 

 

msg

消息内容

 

 

 

 

 

 

 

 

 

 

结果格式如下:

{

  • body"test001",
  • footernull,
  • total0,
  • statustrue,
  • statusCode"200",
  • msg"查询秘钥成功"

}

 

 

 

写入数据

接口:

http://localhost:8080/write

请求方式:

POST

参数:

 

 

 

path

String

请求路径

必须

name

String

名称

可选

value

String

密码

可选

createTime

String

写入时间

默认写入

 

 

 

 

返回数据:

 

 

 

body

数据

 

 

status

状态(true-成功,false-失败)

 

 

msg

消息内容

 

 

 

 

 

 

 

 

 

 

格式如下:

{

    "body": {

        "id": 0,

        "name": null,

        "password": "1232354345645657",

        "path": "kv/myapp",

        "encryptKey": "encryptKey",

        "createTime": "2019-04-21 14:01:18"

    },

    "footer": null,

    "total": 0,

    "status": true,

    "statusCode": "200",

    "msg": "保存秘钥成功"

}

 

删除数据

接口:

http://localhost:8080/delete

请求方式:

POST

参数:

 

 

 

path

String

请求路径

必须

 

 

 

 

返回数据:

 

 

 

body

数据

 

 

status

状态(true-成功,false-失败)

 

 

msg

消息内容

 

 

 

 

 

 

 

 

 

 

格式如下:

{

    "body": null,

    "footer": null,

    "total": 0,

    "status": true,

    "statusCode": "200",

    "msg": "保存秘钥成功"

}

 

客户端使用方式

引入前提:

  1. vault服务必须正常运行。
  2. 生成的服务端证书需要导入到本地,在本地客户端及浏览器导入证书。浏览器安装证书:

一般导出的是xx.p12或者xxx.crt文件,直接导入到浏览器