【问题标题】:Consul Check HTTPS self signedConsul 检查 HTTPS 自签名
【发布时间】:2016-07-23 08:48:37
【问题描述】:

我使用 Consul 注册一个 Web 应用程序。 Web 应用程序使用 Java Consul 客户端注册检查。我可以使用自签名 CA 激活 TLS 和加密,以加密领事代理之间以及我的 webapp 和领事代理之间的交换。但我无法使用自签名 CA 签名证书检查 HTTPS。

我的 Web 应用程序是安全的,并且仅使用自签名证书侦听 HTTPS。当我向领事注册会话并提供 https://... URL 进行检查时,我被拒绝了:

com.orbitz.consul.ConsulException: Consul request failed with status [500]: rpc error: rpc error: Check 'service:a4cHealthCheck:172.17.0.3' is in critical state

在领事代理日志中,我可以看到:

2016/07/23 08:24:45 [WARN] agent: http request failed 'https://172.17.0.3:8443/rest/latest/health/check': Get https://172.17.0.3:8443/rest/latest/health/check: x509: certificate signed by unknown authority

似乎领事代理不接受自签名证书进行检查。如何仅对检查禁用 SSL 验证或为检查提供信任者?

【问题讨论】:

    标签: consul


    【解决方案1】:

    您可以使用属性 tls_skip_verify 禁用 HTTPS 检查。它在Consul checks documentation 的 HTTP 部分中进行了描述。 如果您使用 JSON 文件来配置您的代理,这里是一个配置示例。

    {
      "services": [
        {
          "id": "instance-1",
          "name": "ManagementService",
          "address": "localhost",
          "port": 11080,
          "checks": [
            {
              "id": "api",
              "name": "HTTP API",
              "http": "https://localhost:11081/service/monitoring/ping",
              "tls_skip_verify": true,
              "interval": "5s",
              "timeout": "1s"
            }
          ]
        }
      ]
    }
    

    【讨论】:

    • 嗨@nicolas:我是运行领事的Windows平台。我已经尝试过你发布的类似配置。但健康检查从未登记。任何想法?我的整个配置在这里: { "service": { "id":"somename", "name":"nameofthissevice", "service": "myservice", "address": "127.0.0.1", "port": 62133,“enableTagOverride”:假,“检查”:{“id”:“somename”,“name”:“nameofthissevice”,“http”:“127.0.0.1:62133/Service1.svc/MyService/PingMe”,“tls_skip_verify”:假,“方法”:“ GET”、“间隔”:“10s”、“超时”:“1s” } } }
    • 你用的是什么版本的领事?
    • 嗨@nicolas,在windows平台上尝试0.9.0。
    • 您的检查定义中缺少 https { "service": { "id":"somename", "name":"nameofthissevice", "service": "myservice", "address": "127.0.0.1", "port": 62133, "enableTagOverride": false, "check": { "id": "somename", "name": "nameofthissevice", "http": "https://127.0.0.1:62133/Service1.svc/MyService/PingMe";, "tls_skip_verify": false, "method": "GET", "interval": "10s", "timeout": "1s" } } }
    • 嗨@nicolas,还是没有运气。关于这个还有其他想法/建议吗?我还创建了一个单独的线程stackoverflow.com/questions/45576409/…,还有更多。你能帮帮我吗?谢谢。
    【解决方案2】:

    Golang 加密库有一套他寻找值得信赖的权威的路径。这因操作系统而异,但对于 Linux 系统,您可以查看以下链接。

    https://golang.org/src/crypto/x509/root_linux.go

    因此,您可以通过将 CA 安装到系统默认设置来解决您的问题。

    有关如何安装根证书,请参阅

    https://superuser.com/questions/437330/how-do-you-add-a-certificate-authority-ca-to-ubuntu

    或其他操作系统

    http://kb.kerio.com/product/kerio-connect/server-configuration/ssl-certificates/adding-trusted-root-certificates-to-the-server-1605.html

    【讨论】:

    • 天哪,我花了几个小时才找到你的帖子!非常感谢!
    • 我没有设法通过您提供的链接使其适用于 MacOS。有其他解决方案的想法吗?
    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多