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
安装步骤
- 下载安装包
最新版本:https://www.vaultproject.io/downloads.html
历史版本:https://releases.hashicorp.com/vault/
- 解压缩文件
- 生成证书
- 配置vault连接
- 启动vault
- 访问页面初始化/解锁/登录
- 开启秘钥引擎,增加测试数据验证
安装参考:
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生成证书
生成证书
- 将bash压缩包解压到到valut安装目录
可以进入到bash目中查看,该目录中只有openssl.cfg配置文件
- 进入H:\Program Files\vault_1.1.1_windows_amd64\bash\work\ca\server目录,修改openssl.cnf配置文件,绑定域名或者ip地址。
我这里域名绑定为vault.dragon.com,如果是自定义域名,则修改在C:\Windows\System32\drivers\etc文件配置映射。
- 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服务如下:
这里需要设置一组在紧急情况下需要使用的主钥匙。
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生成证书
生成证书
- 将bash压缩包解压到到valut安装目录
可以进入到bash目中查看,该目录中只有openssl.cfg配置文件
- 修改文件权限
chmod 755 -R bash
- 进入bash/work/ca/server目录,修改openssl.cnf配置文件,绑定域名或者ip地址。
我这里域名绑定为vault.dragon.com,如果是自定义域名,则修改在C:\Windows\System32\drivers\etc文件配置映射。
- 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证书
- 将bash压缩包解压到到valut安装目录
可以进入到bash目中查看,该目录中只有openssl.cfg配置文件。
- 进入/opt/vault_1.1.1_linux_amd64/bash/work/ca/server目录,修改openssl.cnf配置文件,绑定域名或者ip地址。
我这里域名绑定为vault.vm.com,如果是自定义域名,则修改本地C:\Windows\System32\drivers\etc文件配置映射。
- 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客户端服务部署
- 创建目录
[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、浏览器测试
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",
- id: 1,
- name: "test001",
- password: "test001"
},
- footer: null,
- total: 0,
- status: true,
- statusCode: "200",
- msg: "查询秘钥成功"
}
根据key查询数据
接口: |
http://localhost:8080/readByKey |
||
请求方式: |
POST |
||
参数: |
|
|
|
path |
String |
请求路径 |
|
key |
String |
数据名称key |
|
返回数据: |
|
|
|
body |
数据 |
|
|
status |
状态(true-成功,false-失败) |
|
|
msg |
消息内容 |
|
|
|
|
|
|
|
|
|
|
结果格式如下:
{
- body: "test001",
- footer: null,
- total: 0,
- status: true,
- 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": "保存秘钥成功"
}
客户端使用方式
引入前提:
- vault服务必须正常运行。
- 生成的服务端证书需要导入到本地,在本地客户端及浏览器导入证书。浏览器安装证书:
一般导出的是xx.p12或者xxx.crt文件,直接导入到浏览器
- php判断客户端UserAgent
- CSS基础语法(二) CSS的9种选择器
- vue表单详解——小白速会
- php curl获取网页内容乱码和获取不到内容的解决方法
- vue组件详解(一)——组件与复用
- 【LeetCode 459】关关的刷题日记42 – Repeated Substring Pattern
- HDU 1848 Fibonacci again and again(SG函数)
- php 分页相关
- 最简单的php导出excel文件方法
- vue组件详解(二)——使用props传递数据
- Android获取QQ和微信的聊天记录,并保存到数据库
- 博弈论进阶之SG函数
- Discuz!的cookie机制
- Js的cookie和session
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Thinking in DAX with PowerBI - 逻辑框架 - 计算逻辑
- Linux并发执行很简单,这么做就对了
- 一条命令让你明白shell中read命令的常用参数
- 防抖与节流
- 一道题理解Linux中sort命令的多个参数
- Centos7服务器下启动jar包项目的最佳方法
- JavaScript易错点(长期更新)
- Centos7.5配置java环境安装tomcat的讲解
- CSS3卡片光照效果
- Linux文本查找命令find的用法详解
- Canvas系列(2):曲线图形
- Shell中去除字符串里的空格或指定字符的方法
- 使用‘fsck’修复Linux中文件系统错误的方法
- linux/OSX中“DD”命令制作ISO镜像操作系统安装U盘的方法
- 《高效能程序员的修炼》读书笔记