You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Envoy代理HTTPS流量时加载pkcs12证书失败,请求排查配置问题

问题

需求:使用Envoy作为HTTPS流量代理,从Java开发人员处获取了pkcs12格式证书(/etc/cert.p12),希望用户可通过8080端口无需证书访问Envoy,由Envoy转发请求至api.example.com:443。

已配置的envoy.yaml如下:

static_resources:
  listeners:
  - address:
      socket_address:
        address: 0.0.0.0
        port_value: 8080
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          codec_type: AUTO
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: app
              domains:
              - "*"
              routes:
              - match:
                  prefix: "/"
                route:
                  cluster: api-example-https
          http_filters:
          - name: envoy.filters.http.router
            typed_config:
              "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

  clusters:
  - name: api-example-https
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: api-example-https
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: api.example.com
                port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
        common_tls_context:
          tls_certificates:
          - pkcs12:
              filename: /etc/cert.p12

启动Envoy时出现错误:

[2022-11-01 22:17:48.788][1][critical][main] [source/server/server.cc:117] error initializing configuration '/etc/envoy.yaml': Failed to load pkcs12 from /etc/cert.p12
[2022-11-01 22:17:48.788][1][info][main] [source/server/server.cc:961] exiting
Failed to load pkcs12 from /etc/cert.p12

排查3小时仍未解决,请问配置中遗漏了什么?

解决方法

你的配置遗漏了PKCS12证书的密码配置,Java生成的PKCS12证书默认带密码保护,Envoy加载时必须指定密码才能读取证书内容。

修改后的clusters部分配置如下:

clusters:
  - name: api-example-https
    type: STRICT_DNS
    lb_policy: ROUND_ROBIN
    load_assignment:
      cluster_name: api-example-https
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address:
                address: api.example.com
                port_value: 443
    transport_socket:
      name: envoy.transport_sockets.tls
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
        common_tls_context:
          tls_certificates:
          - pkcs12:
              filename: /etc/cert.p12
              password:
                inline_string: "你的证书密码" # 替换为实际的PKCS12证书密码

同时需要确认以下几点:

  • 证书文件/etc/cert.p12的权限是否正确,Envoy进程需要具备读取权限,可执行chmod 644 /etc/cert.p12调整权限
  • 证书密码是否准确,若不确定可联系Java开发人员确认
  • Envoy版本是否支持PKCS12格式,建议使用1.18及以上版本

内容的提问来源于stack exchange,提问作者Abdennour TOUMI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:20:33