我正在使用Hashicorp vault生成自签名证书,并成功生成了CA证书,使用以下链接颁发CA,ca链和私钥: 策略,构建证书。我还能够将结果.pem
,即证书,颁发Ca,caChain和私钥文件的组合成功导入Java密钥库,keytool
以获取.jks
。
因此,我使用此命令成功启动 vaultvault server -config=config.hcl
,输出如下:
==> Vault server configuration:
Api Address: https://test.sammy.com:8200
Cgo: disabled
Cluster Address: https://test.sammy.com:8201
Listener 1: tcp (addr: "127.0.0.1:9000", cluster address: "127.0.0.1:9001", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
Listener 2: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "enabled")
Log Level: info
Mlock: supported: true, enabled: true
Recovery Mode: false
Storage: inmem
Version: Vault v1.4.2
==> Vault server started! Log data will stream in below:
2020-06-28T23:37:01.489+0100 [INFO] proxy environment: http_proxy= https_proxy= no_proxy=
使用来自此 StackOverflow 问题的配置文件config.hcl
(如下所示(:
backend "inmem" {}
listener "tcp" {
address = "127.0.0.1:9000"
tls_disable = 1
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 0
tls_cert_file = "/Vault/pki_ca_cert_chain.pem"
tls_key_file = "Vault/vault.key.pem"
}
# Advertise the non-loopback interface
api_addr = "https://test.sammy.com:8200"
cluster_addr = "https://test.sammy.com:8201"
我使用此命令公开服务器地址:export VAULT_ADDR='https://test.sammy.com:8200'
。
我现在遇到的问题是,当我运行此命令查看服务器状态vault status
时,出现以下错误:
Error checking seal status: Get https://test.sammy.com:8200/v1/sys/seal-status: dial tcp 45.33.2.79:8200: connect: no route to host
我的 Spring 引导应用程序选取信任库文件,但在运行时抛出此异常:I/O exception (java.net.NoRouteToHostException) caught when processing request to {s}->https://test.sammy.com:8200: No route to host (Host unreachable)
或简单地说,Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable)
.我的引导程序.yml看起来像这样
spring:
application:
name: hashicorp-spring-app
cloud:
vault:
enabled: true
host: test.sammy.com
port: 8200
scheme: https
authentication: cert
ssl:
trust-store: classpath:vault-truststore.jks
trust-store-password: somethingsecret
当我尝试使用以下命令初始化 vault 时,我收到不同的错误:vault operator init
Error initializing: Put https://test.sammy.com:8200/v1/sys/init: dial tcp 45.79.19.196:8200: i/o timeout
我已经尝试了此链接来修复它,但是,我仍然收到上面的I/O超时错误。我很确定我错过了一些可能简单的东西,并梳理了互联网以找到一个简单的解决方案,但似乎找不到任何解决方案,所以请,任何帮助将不胜感激!!
您的保管库实例仅侦听环回地址,因为以下代码:
listener "tcp" {
address = "127.0.0.1:9000"
tls_disable = 1
}
所以你有两个选择:
- 在本地运行客户端并在环境变量中设置
VAULT_ADDR=127.0.0.1:9000
- 将您的配置更改为
address = 0.0.0.0:9000
并使用标准网络访问侦听所有接口的 Vault。
至于api_addr
,它被用来告诉Vault如何向客户宣传自己。它首先不用于到达它。因此,放置在那里的价值取决于您的客户如何访问保险柜。例如,该地址将发送给选择退出保险柜请求转发的客户端,其中包含X-Vault-No-Request-Forwarding: 1
。
cluster_addr
参数是不同的:它仅由保险柜使用,而不是您的客户使用。Vault 使用它与集成存储达成共识,或者如果您使用 Vault Enterprise,则与其他集群进行复制。
根据运行"保管库状态"时的错误消息,您用于api_addr和cluster_addr的 FQDN 似乎正在解析为公共地址 45.33.2.79,该地址不可路由,并且可能不是托管保管库。
将api_addr和cluster_addr更改为: api_addr = "https://127.0.0.1:8200" cluster_addr = "https://127.0.0.1:8201">
这应该对您看到的两个错误进行排序。