问题标签 [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.

0 投票
1 回答
385 浏览

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吗?
  • 这种方法有什么潜在的陷阱吗?
0 投票
0 回答
94 浏览

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:

0 投票
1 回答
64 浏览

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 请求)。这甚至可能吗?如果是,任何人都可以指出我正确的文件或示例吗?

0 投票
0 回答
136 浏览

reactjs - React + Mutual TLS (TLS) 与客户端证书到 REST 微服务

有没有办法使用 mTLS 从独立的 React 应用程序调用微服务?

示例: React 应用程序托管在没有 .Net 应用程序的 IIS 中(仅为 React 应用程序托管静态 html/JS 文件)。我是否需要反向代理或其他东西来调用需要客户端证书的微服务?

0 投票
2 回答
235 浏览

kotlin - ktor sslConnector 从 jar p12 pkcs12 jks 密钥库和 mtls 相互 ssl 连接中服务/读取

我已经想出了如何使用 EmbeddedServer Jetty 启动 ktor 并使用我自己的签名证书(由我自己的自签名 rootCA 证书签名)提供 https/ssl/tls 服务。

现在 ktor sslConnector 需要keyStorePathas File,但我更愿意从最终 fat jar 中的 /a 文件中提供密钥库(主要是为了能够在 kubernetes 集群中运行它)

有没有办法告诉 ktor 将其 jar 文件中嵌入的资源作为 keyStore 获取/读取?

有没有办法告诉 ktor 将其 jar 文件中嵌入的资源作为 keyStore 获取/读取?

(还想知道为什么sslConnector仍然需要密钥库,就File好像它已经将整个密钥库作为第一个参数一样,但这可能与正在使用的实际 Web 容器无关)

第二个问题:是否可以启用双向 tls,以便在客户端无法提供有效证书时 ktor 服务器拒绝连接如果是,我将如何配置?

0 投票
1 回答
170 浏览

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_clients_server能力,但它们似乎是我需要的黑客,而不是一个适当的解决方案。

我想我的问题是这样的:

  • 是否可以openssl根据 mTLS 规则使用 CA 链验证证书?
  • 如果不可能,那么不从头开始编写它的方法是什么?
0 投票
0 回答
12 浏览

apache-zookeeper - Apache ZooKeeper 4lw(FourLetterWord)可以与 mTLS(相互传输层安全)一起使用吗?

我在不安全的连接上使用了 4lw,但我想在使用 mTLS 保护的连接上使用 4lw。到目前为止还没有成功。

如果不支持,建议用什么代替 4lw?管理服务器?

0 投票
1 回答
41 浏览

docusignapi - Docusign webhooks SignMessageWithX509Cert mTLS

在模拟账户中尝试双向 TLS 并尝试了解验证的工作原理。我们正在使用将 signMessageWithX509Cert 属性设置为 true 的 eventNotifications。但是,不知道它是否正在工作,因为 DocuSign 没有提供有关它的信息。

问题:

  • 是否为模拟账户启用/可能启用 mTLS?
  • 如果我有 signMessageWithX509Cert=true 并且我的侦听器中没有 mTLS,那么所有请求都以哪种方式通过?DocuSign 不验证?无论哪种方式,我都会收到所有事件,DocuSign 不会引发任何错误。
  • 我们如何从 Connect 控制台中的 Docusign 日志中知道 mTLS 是否有效?
0 投票
0 回答
331 浏览

java - tls 正在使用自签名证书而不是真实证书的 mosquitto 经纪人

设置

我正在尝试使用双向 TLS 将 Java 客户端连接到 mosquitto MQTT 代理。客户端和代理位于两个能够相互通信的独立虚拟机上。我正在尝试连接端口 8883。当我尝试使用自签名 PEM 格式证书连接时,连接成功。但是,当我尝试连接我公司内部 CA 生成的证书时,连接不会发生,客户端上的一条错误消息和代理上的一条错误消息。证书在每一侧都不同。每个都是使用与它所在的 vm 匹配的通用名称生成的,并且都是从同一个 CA 生成的。至于代码,socketFactory代码如下,

用于连接的特定库是 Paho。

客户端错误信息:

经纪人:

我已经能够将问题缩小到与客户端进行身份验证的代理(服务器)。我这样做的方法是使用真实证书和自签名 CA 运行客户端,同时使用真实 CA 和自签名证书运行代理,如下所述。

所有自签名作品

客户 <-----> 经纪人
自签名crt 自签名crt
自签名密钥 自签名密钥
自签名证书 自签名证书

客户真实证书和经纪人自签名作品

客户 <-----> 经纪人
真正的crt 自签名crt
真正的钥匙 自签名密钥
自签名证书 真正的钙

所有真正的证书都不起作用

客户 <-----> 经纪人
真正的crt 真正的crt
真正的钥匙 真正的钥匙
真正的钙 真正的钙

证书验证 我检查了证书是否配置正确。

  1. 它们的通用名称与它们运行的​​虚拟机的主机名相同
  2. 证书被 CA 接受

wireshark 数据包捕获 我使用自签名证书和一个使用真实证书的连接执行数据包捕获。它们在读取证书的方式上有所不同。在自签名证书捕获中,顺序是发送客户端问候,然后发送服务器问候、证书、服务器密钥交换、证书请求、服务器问候完成在 1 个回复中发送。在真正的证书捕获中,顺序是 Client Hello 发送,Server Hello 发送,然后 Certificate,Server Key Exchange,Certificate Request,Server Hello Done。服务器问候是单独发送的,字节表明证书值包含在此数据包中,但未被识别。似乎服务器 hello 错误地包含了证书值。

我已经用完了我能想到的选项。任何想法都会受到欢迎!

0 投票
1 回答
46 浏览

certificate - ECC - MTLS 握手中的 RSA 证书 Q

在我们的 MTLS 握手中,我们有一个使用 ECC 颁发的客户端证书和一个使用 RSA 颁发的服务器证书。我们在算法检查中看到握手错误,因为服务器没有 ecdsa 算法,客户端和服务器证书是否应为相同类型(RSA 或 ECC)才能使握手工作,或者有没有办法在服务器端添加 ecdsa 算法而不更改 RSA 服务器证书 ?