我解决了我的问题。在我的情况下,在 gourouter 上启用了双向 TLS:
默认情况下,Gorouter 在 TLS 握手中请求但不需要客户端证书。
https://docs.cloudfoundry.org/adminguide/securing-traffic.html#gorouter_mutual_auth
检查是否启用了 mTLS
1.寡妇SCHANNEL事件记录
添加注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
EventLogging REG_DWORD = 3
https://blogs.technet.microsoft.com/kevinjustin/2017/11/08/schannel-event-logging/
现在您应该找到服务器要求提供客户端证书但找不到的事件日志。
2.curl
看粗线:
curl -I -v -H "Connection: close" https://your-app.cloud
- 即将 connect() 到 your-app.cloud 端口 443 (#0)
- 连接到 your-app.cloud 端口 443 (#0)
- 使用 certpath 初始化 NSS:sql:/etc/pki/nssdb
- CAfile:/etc/pki/tls/certs/ca-bundle.crt CApath:无
- NSS:未找到客户端证书(未指定昵称)
- 使用 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 的 SSL 连接
3.openssl
看粗线:
openssl s_client -connect your-app.cloud:443 -state
- 已连接(00000003)
- SSL_connect:在/连接初始化之前
- SSL_connect:SSLv2/v3 写客户端 hello A
- SSL_connect:SSLv3 读取服务器 hello A
- ...
- 验证返回:1
- SSL_connect:SSLv3 读取服务器证书A
- SSL_connect:SSLv3 读取服务器密钥交换 A
- SSL_connect:SSLv3 读取服务器证书请求 A
- SSL_connect:SSLv3 读取服务器完成 A
- SSL_connect:SSLv3写客户端证书A
- SSL_connect:SSLv3 写客户端密钥交换 A
- SSL_connect:SSLv3 写入更改密码规范 A
- SSL_connect:SSLv3 写入完成 A
- SSL_connect:SSLv3 刷新数据
- SSL_connect:SSLv3 读取服务器会话票据 A
- SSL_connect:SSLv3 读取完成 A
禁用 Gorouter mTLS
使用 CF 部署清单更改 Gorouter 属性:
- name: router
- name: gorouter
release: routing
properties:
router:
forwarded_client_cert: always_forward
client_cert_validation: none
现在您可以检查是否再次启用了 mTLS。
请注意,这些设置不适用于路由版本0.164.0
,但0.178.0
可以按预期工作。