问题标签 [mtls]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ssl - 是否应该仅在 TLS 握手期间执行相互 TLS?
最近,我一直在为基于物联网的项目评估不同的 API 网关 (API GW) 选项。这样做的目的是找到一个足够好的解决方案来执行设备和 API GW 的相互 TLS (mTLS) 身份验证。
我尝试过的大多数解决方案似乎都在 TLS 握手期间执行 mTLS,如此处所示。所以这就是我所理解的OSI 第 4 层 (TCP/IP)身份验证方法。
但是,Kong API 网关似乎在OSI 第 7 层(应用程序)上执行此操作。基本上,在 TLS 握手阶段没有客户端身份验证,而是应用层验证对等证书。因此它能够发送带有 401 状态和一些有效负载的响应(如果 TLS 握手失败,这是不可能的)。例子
我们可以清楚地看到请求成功通过了 TLS 握手,应用层形成了 401 响应{"message": "TLS certificate failed verification"}
。
这让我想到了以下几个问题:
- 形式上来说,Kong在这里做的也可以叫mTLS吗?
- 这种方法有什么潜在的陷阱吗?
kubernetes - istio 出口:从 kubernetes 集群到 mariadb 的 mtls 连接
我目前正在尝试在 kubernetes 服务器上部署的 pod 和外部 mariadb 服务器之间建立连接。
当我尝试从 pod 连接到服务器时,我遇到了这个错误:
ERROR 2013 (HY000): Lost connection to MySQL server at 'handshake: reading initial communication packet', system error: 11
据我了解,问题是由于mysql协议要求第一个连接数据包不是TLS,而出口网关只做TLS。
我不知道是否有解决方法或变量可以改变它的工作,或者它是否只是我的 istio 版本太低而无法支持这种类型的连接。
这是我的配置:
mariadb 服务器:
mariadb 服务器是一个启用了 TLS 的容器。
我创建了一个需要 X509 的没有密码的用户。
如果我尝试从带有证书的终端连接到 mariadb,它就成功了。
Kubernetes 集群:
istio:1.6.14
提供客户端证书
gateway:
virtual service:
DestinationRule:
Service entries:
google-cloud-platform - Google Cloud Functions 中的 HTTPS 是否支持使用 PKI 的 mTLS?
我正在寻找使用 mTLS 在两个方向上进行身份验证的 HTTPS 下载服务,请求和响应使用私有 CA 颁发的证书进行签名。这样做的目的是保护嵌入式设备的 OTA 更新(我需要在下载固件映像之前识别和授权两端,PKI + mTLS 是一个非常可行的解决方案)。拥有浏览器的人永远不会与之交互。
Google Cloud Functions 通过提供 Google 颁发的公共 HTTPS 证书来终止 TLS。我似乎无法弄清楚如何使用自定义证书使 GCF 为 HTTPS 提供服务(或者仅在客户端证书由我的私有 CA 签名的情况下才授权传入的 HTTPS 请求)。这甚至可能吗?如果是,任何人都可以指出我正确的文件或示例吗?
reactjs - React + Mutual TLS (TLS) 与客户端证书到 REST 微服务
有没有办法使用 mTLS 从独立的 React 应用程序调用微服务?
示例: React 应用程序托管在没有 .Net 应用程序的 IIS 中(仅为 React 应用程序托管静态 html/JS 文件)。我是否需要反向代理或其他东西来调用需要客户端证书的微服务?
kotlin - ktor sslConnector 从 jar p12 pkcs12 jks 密钥库和 mtls 相互 ssl 连接中服务/读取
我已经想出了如何使用 EmbeddedServer Jetty 启动 ktor 并使用我自己的签名证书(由我自己的自签名 rootCA 证书签名)提供 https/ssl/tls 服务。
现在 ktor sslConnector 需要keyStorePath
as File
,但我更愿意从最终 fat jar 中的 /a 文件中提供密钥库(主要是为了能够在 kubernetes 集群中运行它)
有没有办法告诉 ktor 将其 jar 文件中嵌入的资源作为 keyStore 获取/读取?
有没有办法告诉 ktor 将其 jar 文件中嵌入的资源作为 keyStore 获取/读取?
(还想知道为什么sslConnector
仍然需要密钥库,就File
好像它已经将整个密钥库作为第一个参数一样,但这可能与正在使用的实际 Web 容器无关)
第二个问题:是否可以启用双向 tls,以便在客户端无法提供有效证书时 ktor 服务器拒绝连接?如果是,我将如何配置?
node.js - 使用 OpenSSL 在应用程序级别实现双向 TLS
我有一个 Node.js 服务器,它接收带有XFCC标头中提供的客户端 TLS 证书的请求。
我想在应用程序级别执行相互 TLS,即针对服务器的 CA 信任库验证客户端 TLS 证书 - 所有这些都在应用程序代码中完成,而不是依赖于 Web 代理配置。
我正在使用 NPM 的pem依赖项,它本质上是一堆 JS 包装器openssl
。特别是,类似于 mTLS 所需的验证是verify
方法:
这适用于最简单的情况:
- ca-chain.crt:
Root CA
->Int 1 CA
- 客户端链.crt
Root CA
->Int 1 CA
->Leaf 1
但在 Int CA 不同的更复杂的情况下它会失败:
- ca-chain.crt:
Root CA
->Int 1 CA
- 客户端链.crt
Root CA
->Int 2 CA
->Leaf 2
具有以下内容:
据我了解,只要所有证书都有效并导致相同 Root CA
,mTLS 就会成功执行,尽管Int CA
's 不同,这意味着verify
不能按原样工作,以便在 App 级别执行 mTLS 等效。
我知道s_client
和s_server
能力,但它们似乎是我需要的黑客,而不是一个适当的解决方案。
我想我的问题是这样的:
- 是否可以
openssl
根据 mTLS 规则使用 CA 链验证证书? - 如果不可能,那么不从头开始编写它的方法是什么?
apache-zookeeper - Apache ZooKeeper 4lw(FourLetterWord)可以与 mTLS(相互传输层安全)一起使用吗?
我在不安全的连接上使用了 4lw,但我想在使用 mTLS 保护的连接上使用 4lw。到目前为止还没有成功。
如果不支持,建议用什么代替 4lw?管理服务器?
docusignapi - Docusign webhooks SignMessageWithX509Cert mTLS
在模拟账户中尝试双向 TLS 并尝试了解验证的工作原理。我们正在使用将 signMessageWithX509Cert 属性设置为 true 的 eventNotifications。但是,不知道它是否正在工作,因为 DocuSign 没有提供有关它的信息。
问题:
- 是否为模拟账户启用/可能启用 mTLS?
- 如果我有 signMessageWithX509Cert=true 并且我的侦听器中没有 mTLS,那么所有请求都以哪种方式通过?DocuSign 不验证?无论哪种方式,我都会收到所有事件,DocuSign 不会引发任何错误。
- 我们如何从 Connect 控制台中的 Docusign 日志中知道 mTLS 是否有效?
java - tls 正在使用自签名证书而不是真实证书的 mosquitto 经纪人
设置
我正在尝试使用双向 TLS 将 Java 客户端连接到 mosquitto MQTT 代理。客户端和代理位于两个能够相互通信的独立虚拟机上。我正在尝试连接端口 8883。当我尝试使用自签名 PEM 格式证书连接时,连接成功。但是,当我尝试连接我公司内部 CA 生成的证书时,连接不会发生,客户端上的一条错误消息和代理上的一条错误消息。证书在每一侧都不同。每个都是使用与它所在的 vm 匹配的通用名称生成的,并且都是从同一个 CA 生成的。至于代码,socketFactory代码如下,
用于连接的特定库是 Paho。
客户端错误信息:
经纪人:
我已经能够将问题缩小到与客户端进行身份验证的代理(服务器)。我这样做的方法是使用真实证书和自签名 CA 运行客户端,同时使用真实 CA 和自签名证书运行代理,如下所述。
所有自签名作品
客户 | <-----> | 经纪人 |
---|---|---|
自签名crt | 自签名crt | |
自签名密钥 | 自签名密钥 | |
自签名证书 | 自签名证书 |
客户真实证书和经纪人自签名作品
客户 | <-----> | 经纪人 |
---|---|---|
真正的crt | 自签名crt | |
真正的钥匙 | 自签名密钥 | |
自签名证书 | 真正的钙 |
所有真正的证书都不起作用
客户 | <-----> | 经纪人 |
---|---|---|
真正的crt | 真正的crt | |
真正的钥匙 | 真正的钥匙 | |
真正的钙 | 真正的钙 |
证书验证 我检查了证书是否配置正确。
- 它们的通用名称与它们运行的虚拟机的主机名相同
- 证书被 CA 接受
wireshark 数据包捕获 我使用自签名证书和一个使用真实证书的连接执行数据包捕获。它们在读取证书的方式上有所不同。在自签名证书捕获中,顺序是发送客户端问候,然后发送服务器问候、证书、服务器密钥交换、证书请求、服务器问候完成在 1 个回复中发送。在真正的证书捕获中,顺序是 Client Hello 发送,Server Hello 发送,然后 Certificate,Server Key Exchange,Certificate Request,Server Hello Done。服务器问候是单独发送的,字节表明证书值包含在此数据包中,但未被识别。似乎服务器 hello 错误地包含了证书值。
我已经用完了我能想到的选项。任何想法都会受到欢迎!
certificate - ECC - MTLS 握手中的 RSA 证书 Q
在我们的 MTLS 握手中,我们有一个使用 ECC 颁发的客户端证书和一个使用 RSA 颁发的服务器证书。我们在算法检查中看到握手错误,因为服务器没有 ecdsa 算法,客户端和服务器证书是否应为相同类型(RSA 或 ECC)才能使握手工作,或者有没有办法在服务器端添加 ecdsa 算法而不更改 RSA 服务器证书 ?