Hashicorp Consul:证书无效,证书对于 server.dc1.consul.hello.com 无效

问题描述 投票:0回答:1

我正在

docker
中构建开发环境,使用带有
docker-compose
的多个容器。在 docker 中,我也有自己的私有证书颁发机构 (CA) 服务器。每个容器都有自己的 CERT,由我的私人 CA 签名。 像这样:

  • ds.hello.com.crt(目录服务)
  • am.hello.com.crt(访问管理器)
  • consul.hello.com.crt
  • 我的服务-1.hello.com.crt
  • ...

我不想更改此域名结构。

docker 容器名称和

consul
服务器的主机名是
consul.hello.com
。但是当我开始
consul
时,它会这样抱怨证书:

[ERROR] agent.server.rpc: failed to read byte: conn=from=127.0.0.1:56931 error="remote error: tls: bad certificate"
[WARN]  agent: [core][Channel #1 SubChannel #5] grpc: addrConn.createTransport failed to connect to {Addr: "dc1-127.0.0.1:8300", ServerName: "agent-one", }. Err: connection error: desc = "transport: Error while dialing: tls: failed to verify certificate: x509: certificate is valid for consul.hello.com, not server.dc1.consul.hello.com"
[WARN]  agent: error getting server health from server: server=agent-one error="rpc error getting client: failed to get conn: tls: failed to verify certificate: x509: certificate is valid for consul.hello.com, not server.dc1.consul.hello.com"
[ERROR] agent.server.rpc: failed to read byte: conn=from=127.0.0.1:59375 error="remote error: tls: bad certificate"

这是我的

Consul
配置文件的相关部分:

{
  "domain": "hello.com",
  "bootstrap": true,
  "server": true,   
  "log_level": "debug",
  "datacenter": "consul",
  "encrypt": "f502FprfDugOXiWqZUJpyAwgeXH+6qs6VNFjPxX8TgU=",
  "bind_addr": "0.0.0.0",                                   
  "client_addr": "0.0.0.0",                                 
  "node_name": "agent-one",                                 
  "data_dir": "/tmp/consul-data",
  "leave_on_terminate": false,   
  "skip_leave_on_interrupt": true,
  "ui_config": {                  
    "enabled": true               
  },                              
  "addresses": {   
    "https": "0.0.0.0"
  },                  
  "ports": {          
    "http": -1,       
    "https": 8501
  },             
  "tls": {       
    "defaults": {
      "key_file": "/tmp/consul.hello.com.plain-key",
      "cert_file": "/tmp/consul.hello.com.crt",     
      "ca_file": "/tmp/ca.crt",                     
      "verify_incoming": true,                      
      "verify_outgoing": true,                 
      "verify_server_hostname": true
    }                                
  }                                  
}               

但是这个配置不起作用。我可以覆盖配置中的

domain
名称和
datacenter
名称,但这仍然不够:

failed to verify certificate: x509: 
   certificate is valid for consul.hello.com, not server.consul.hello.com"

领事仍然坚持使用

server
前缀。

我需要将

verify_server_hostname
设置为
true

如何从

consul
中删除服务器前缀?

docker dns consul pki
1个回答
0
投票

Consul
需要证书中的
SAN
,但我的证书请求中未设置。

我使用 OpenVPN easy-rsa 所以我的案例的解决方案是添加以下参数:

--subject-alt-name="DNS:server.$FQDN"

我的环境中

FQDN=consul.hello.com
的位置。

© www.soinside.com 2019 - 2024. All rights reserved.