标签: mtls

Istio mtls 错误配置导致行为不一致

istio在 GKE 集群上部署了 2 个启用的服务。

istio版本是1.1.5并且 GKE 已开启v1.15.9-gke.24

istio 已安装 global.mtls.enabled=true

serviceA 正确沟通

serviceB 显然有 TLS 相关问题。

我启动了一个未istio启用的部署,仅用于测试并执行到这curl两个服务端点的测试 pod 。

/ # curl -v serviceA
* Rebuilt URL to: serviceA/
*   Trying 10.8.61.75...
* TCP_NODELAY set
* Connected to serviceA (10.8.61.75) port 80 (#0)
> GET / HTTP/1.1
> Host: serviceA
> User-Agent: curl/7.57.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: application/json
< content-length: 130
< server: …
Run Code Online (Sandbox Code Playgroud)

kubernetes tls1.2 istio mtls

7
推荐指数
0
解决办法
486
查看次数

使用 Envoy 在网络之间建立隧道

对于混合云用例,我们正在研究 EnvoyProxy 是否适合作为跨本地防火墙移动数据的解决方案。预期的设置如下:

  • 应用程序 A 位于本地网络中,没有直接出站或入站 Internet 连接
  • App B 位于云端
  • Envoy代理(PC)放置在云端
  • Envoy 代理 (PA) 放置在本地网络中,并配置为允许到 PC 的出站网络连接
  • PA 创建到 PC 的开放式双向身份验证 TLS 连接,有效地在它们之间创建隧道
  • 应用程序 B 调用 PC 上的 API 端点,该端点通过开放的 TLS 连接路由到 PA,并由 PA 转发到应用程序 A

使用 Envoy 将数据路由到上游集群已有详细记录。但是,我们想知道 Envoy 是否能够在两个代理实例之间设置 TLS 连接并在两个方向上使用该通道。限制是该 TLS 连接只能从一个方向(出站)建立。

如果这是可能的,有人可以指出我正确的方向吗?

谨致问候, 乔斯特

proxy firewall tunnel envoyproxy mtls

7
推荐指数
1
解决办法
1440
查看次数

在 mTLS 中,客户端 CN 名称真的很重要吗?

对于普通 TLS,客户端将检查我正在通信的服务器实际上是否位于与 CN 匹配的 FQDN 上,因此,如果证书用于不同的域,则 TLS 默认情况下不应工作,因为该证书不适用于该站点。

对于 mTLS,当服务器检查客户端证书时,它是否可以以某种方式检查客户端地址是否与 CN 匹配,或者只是检查证书与密钥是否匹配以及证书在客户端是否受信任?即,如果我使用互联网上任何计算机上的正确客户端密钥/证书,如果服务器配置为信任该证书,服务器是否应该连接,或者是否需要客户端以某种方式位于特定地址?

ssl mtls

7
推荐指数
1
解决办法
3168
查看次数

如何增加 .NET 中的 TLS 握手大小?

我在尝试与 .NET 客户端建立双向身份验证时遇到连接协商失败。

这种情况发生在远程服务器显着增加授权 CA 列表之后。

虽然通过设置更高的值可以在任何 Java 客户端中轻松解决此问题jdk.tls.maxHandshakeMessageSize,但我找不到针对 .NET 的相同解决方法。

(.NET Framework 4.7.2) 和 Internet Explorer 11会出现此问题System.Net.HttpClientSystem.Net.Security.SslStream

.net c# schannel mtls

6
推荐指数
1
解决办法
759
查看次数

如何在 ISTIO 中配置 TLS 源?

Istio 不会通过 TLS 发起路由到外部 HTTPs 服务。

我有一个包含两个容器的 pod: - 应用程序 - ISTIO 代理

应用程序调用位于https://someurl.somedomain.com/v1/some-service 的外部第三方 API

应用程序通过调用http://someurl.somedomain.com/v1/some-service向该服务发送 HTTP 请求- 注意它是 HTTP 而不是 HTTPs。

然后我在 ISTIO 中配置了以下内容:

  • 将 HTTP 流量路由到端口 443 的虚拟服务:
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: someservice-vs
spec:
  hosts:
  - someurl.somedomain.com
  http:
  - match:
    - port: 80    
    route:
    - destination:
        host: someurl.somedomain.com
        port:
          number: 443      
    timeout: 40s
    retries:
      attempts: 10
      perTryTimeout: 4s      
      retryOn: gateway-error,connect-failure,refused-stream,retriable-4xx,5xx 
Run Code Online (Sandbox Code Playgroud)
  • 允许流量流出的服务入口。如您所见,我们指定服务在网格外部,我们打开了 443 和 80,它们都使用 HTTP,但 443 配置为 TLS 发起。
apiVersion: …
Run Code Online (Sandbox Code Playgroud)

kubernetes istio envoyproxy mtls

5
推荐指数
1
解决办法
1119
查看次数

在 Kubernetes 和 NGINX 中使用自签名证书设置 mTLS

我有一个托管 REST 回显服务的 Kubernetes 集群 (AKS)。该服务通过 HTTP 运行良好。我正在使用 NGINX 入口来路由流量。我现在想通过 HTTPS 和 mTLS 设置此服务,因此强制客户端指定一个证书以便能够与回声服务进行通信。这是一个 POC,所以我使用的是自签名证书。

我需要设置哪些 Kubernetes 组件才能实现这一点?我阅读了 NGINX 文档,但无法理解是否需要在 Kubernetes 集群中创建证书颁发机构/证书管理器并使用它来配置入口服务以执行 mTLS 步骤。我可以在入口处终止 SSL(在执行 mTLS 之后)并允许从入口到回声服务的不安全通道。

我希望有这种设置经验的人可以提供一些指导。

谢谢!

ssl nginx kubernetes nginx-ingress mtls

5
推荐指数
1
解决办法
3618
查看次数

MTLS 和 http 客户端连接池使用

背景

  • 我需要连接到各种客户端的服务器。
  • 每个客户端连接应使用唯一的 TLS 证书。
  • MTLS 已安装在服务器上。
  • 我想使用连接池来改善延迟。

使用以下http客户端

<dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpclient</artifactId>
   <version>4.5.12</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我的假设 在管理连接池中的连接时,选择连接时,应在选择连接池中的相同连接之前考虑客户端证书。我不希望使用 clientB TLS 证书连接 clientA,反之亦然。

问题 这个假设正确吗?

场景1)

我将每条路由的最大连接数设置为 2。我调用客户端 A 的 MTLS 安全服务器。(池中的一个连接) 我调用客户端 A 的 MTLS 安全服务器。(池中两个连接)这不应该重用第一个连接吗?

场景2)

我将每条路由的最大连接数设置为 2。我为客户端 A 调用 MTLS 安全服务器。(池中的一个连接)我为客户端 B 调用 MTLS 安全服务器。(池中两个连接)

然而,第二次调用似乎没有执行完整的握手,而是使用了 clientA 证书。

我希望第二次调用需要完整的握手,并且连接无论如何都不相关。

这是预期的行为吗?我在这里遗漏了一些明显的东西吗?

更新了更简单的测试用例

我们现在使用 http 上下文,因此我附上了更新的日志。我也简化了测试用例,现在它每次都连接到同一服务器两次,应该使用不同的客户端证书。

该应用程序使用 Spring Boot,并具有单个 RestTemplate 和单个 httpClient。

它使用 PrivateKeyStrategy 来决定与服务器通信时使用什么私钥/证书。

第一个连接使用密钥别名“e2e_transport_key_id_franek”(您将在日志中看到这一点)

第二个连接应使用别名“e2e_transport_key_id_pdw”(日志中从未见过)

我们建立的第二个连接应该使用别名为“e2e_transport_key_id_pdw”的密钥/证书,但是会话已恢复,请参见第 448 行尝试恢复会话。这意味着我们无法使用 PrivateKeyStrategy 来选择要使用的客户端证书。

如何强制客户端连接不重复使用我们打算使用不同客户端证书的连接的会话?

客户端日志 https://pastebin.com/zN0EW3Qy

java ssl apache-httpclient-4.x tls1.2 mtls

3
推荐指数
1
解决办法
2627
查看次数

CURL 显示“未发送所需的 SSL 证书”

我正在使用 WINDOWS 中的 CURL 命令。我已经发布了下面的命令。我还发布了命令的结果。在我看来,服务器在发送证书之前终止连接。但我可能错了。有什么想法为什么没有发送证书吗?

curl -v --cert C:\Users\myFolder\Downloads\hs_test_cert.pem --key C:\Users\myFolder\Downloads\hst_test_key.pem https://myAPIGEEhost.apigee.net/MyBackendName_CCDA_API?apikey=MyAssignedAPIKey

 *   Trying 00.00.00...
* TCP_NODELAY set
* Connected to myAPIGEEhost.apigee.net (00.00.00) port 443 (#0)
* schannel: SSL/TLS connection with myAPIGEEhost.apigee.net port 443 (step 1/3)
* schannel: checking server certificate revocation
* schannel: sending initial handshake data: sending 203 bytes...
* schannel: sent initial handshake data: sent 203 bytes
* schannel: SSL/TLS connection with myAPIGEEhost.apigee.net port 443 (step 2/3)
* schannel: failed to receive handshake, need more data
* …
Run Code Online (Sandbox Code Playgroud)

ssl curl ssl-certificate mtls

3
推荐指数
1
解决办法
9310
查看次数

带有 HTTPS 和证书的 K8s 就绪探测

我在 k8s 上托管了一个 Spring Boot 应用程序,并在应用程序本身上强制执行了 mTLS。通过在 Ingress 级别执行 SSL 终止,然后再次将证书转发到 springboot pod,我可以在连接上执行 mTLS。

问题是,Liveness 和 Readiness 探测器目前不确定如何在就绪/活跃度探测器中发送证书?

任何帮助,将不胜感激。

docker kubernetes mtls

2
推荐指数
1
解决办法
1578
查看次数