问题标签 [root-certificate]

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 投票
4 回答
12019 浏览

docker - 如何让 Docker 中的 GitLab Runner 看到自定义 CA 根证书

我已经安装并配置:

  1. 在 HTTPS 上运行的ServerA的本地GitLab Omnibus
  2. 在ServerB中作为 Docker 服务安装的本地GitLab-Runner

ServerA 证书由自定义 CA Root 生成

配置

我已将 CA 根证书放在 ServerB 上:

如在容器中运行 GitLab Runner - Docker 映像安装和配置中所述,在ServerB上安装了 Runner :

按照注册 Runners - 单行注册命令中的说明注册Runner :

该命令给出以下输出:

更新 CA 证书...
运行时平台 arch=amd64 os=linux pid=5 revision=cf91d5e1 version=11.4.2
在系统模式下运行。

正在注册跑步者...成功跑步者=8UtcUXCY
跑步者注册成功。随意启动它,但如果它已经在运行,配置应该会自动重新加载!

我检查过

并且一旦在容器中

并且自定义 CA 根目录正确存在

问题

从 GitLab-CI 运行 Gitlab-Runner 时,管道失败,惨痛地告诉我:

$ git clone https://gitlab-ci-token:${CI_BUILD_TOKEN}@ServerA/foo/bar/My-Project.wiki.git


克隆到“My-Project.wiki”...


致命:无法访问“ https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@ServerA/foo/bar/My-Project.wiki.git/ ”:服务器证书验证失败。CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:无


错误:作业失败:退出代码 1

它不识别颁发者(我的自定义 CA 根),但根据自签名证书或自定义证书颁发机构,第 n.1 点,它应该是开箱即用的:

默认值:GitLab Runner 读取系统证书存储并根据存储在 system 中的 CA 验证 GitLab 服务器

然后我尝试了第 n.3 点的解决方案,编辑

并添加:

但它仍然不起作用。

如何让 Gitlab Runner 读取 CA Root 证书?

0 投票
1 回答
354 浏览

ios - 在启用 ATS 且捆绑了自己的根 CA 的情况下,无法在 iOS 应用程序中通过 HTTPS 进行通信

我们正在尝试制作一个应用程序,该应用程序将使用 NSURLSession 通过 HTTPS 与我们的多个服务器进行通信,因为我们使用的是我们自己的根 CA,它捆绑在我们的应用程序中,并且 ATS 完全启用(NSAllowsArbitraryLoads 设置为 False)。

在调用 NSURLSession 身份验证委托即“URLAuthenticationChallenge”时,我们通过“SecTrustSetAnchorCertificates”设置锚证书,该​​证书通过验证证书的签名以及证书链中证书的签名来验证证书,直到锚证书。还使用 SecTrustSetAnchorCertificatesOnly 排除其他锚点。

成功执行 SecTrustEvaluate 后,在 SessionDataTask completionHandler 中收到错误,如下所述:

笔记:

在设备上安装并信任根 CA 证书后,启用 ATS 的 HTTPS 通信可以正常工作,不会出现任何错误。但我不希望用户手动安装和信任设备上的根 CA。

代码片段:

0 投票
1 回答
358 浏览

mqtt - 减少受限设备所需的根证书列表

我正在开发内存受限的 IoT 设备,并希望通过 MQTT 将其连接到 Google IoT Core。必须信任以允许服务器 TLS 证书验证所需的根证书列表非常长。我正在寻找一个适合资源有限的物联网设备但不会突然停止工作的较小列表。有没有办法安全地减少这个所需证书的列表?

在“设备安全建议”部分下的在线文档(https://cloud.google.com/iot/docs/concepts/device-security)中,它指出:

'与 mqtt.googleapis.com:8883(或 :443)通信时使用 TLS 1.2,并使用根证书颁发机构验证服务器证书是否有效。阅读此安全说明,了解详细的 TLS 要求和未来兼容性。

从安全说明(https://security.googleblog.com/2015/09/disabling-sslv3-and-rc4.html)它指出:

“至少必须信任https://pki.google.com/roots.pem中的证书。”

我可以清楚地看到文档指出完整列表是必需的,但这对于内存受限的物联网设备来说似乎是不可接受的。例如,AWS 只需要一个证书 - 取决于所选的 TLS 密码。请参阅服务器身份验证下的 AWS 文档 ( https://docs.aws.amazon.com/iot/latest/developerguide/managing-device-certs.html )

任何有助于了解可以减少根证书列表的方式(例如基于 ECC 的验证与基于 RSA 的验证的消除)都会有所帮助。

0 投票
1 回答
640 浏览

java - 检索和使用 Microsoft 或 Mozilla 的 Root-CA 列表并在 Java 中使用?

OpenJDK for Windows 中包含的根 CA 证书列表非常令人印象深刻,但有很多根 CA 证书受到常见浏览器(如 Firefox)的信任,而 Java 不信任这些证书。

MicrosoftMozilla都发布了他们当前的根 CA 证书列表,但使用的文件格式似乎是专有的。

curl 项目有一个使用 Mozilla 文件作为源的自动转换器,但是这个转换器 ( mk-ca-bundle ) 是一个 Perl 脚本。

有没有办法用纯 Java 读取这些列表之一,以便之后可以用作信任存储?

0 投票
0 回答
1031 浏览

node.js - 尝试将 node.js 应用程序连接到 AWS IoT,但收到错误“无法获取本地颁发者证书”

我正在尝试使用 aws-iot-device-sdk 从 node.js 应用程序连接到 AWS IoT。我想将消息发布到 AWS MQTT 代理。但是,我不断收到一条错误消息,提示“无法获取本地颁发者证书”

我已经创建了我的设备(没有真实的,只是模仿),在 AWS IoT 中注册,创建了证书、私钥和公钥,向证书添加了策略。

我还从https://www.amazontrust.com/repository/AmazonRootCA1.pem下载了 Amazon Root CA 1 。

现在我的问题来了(对不起,如果它是一个愚蠢的问题):如何,以什么格式保存证书?我只是将文本复制到一个文件中并调用了文件 root_ca.pem 。

我还尝试了不同格式的密钥和证书(xxx.key.pem 或 root_ca.crt)。

我希望看到的是 Amazon 控制台中 MQTT Broker 中的测试消息。

但我似乎无法成功连接到 AWS IoT。

如果缺少某些东西,请多多包涵。我是个初学者,这是我在 StackOverflow 上的第一篇文章。所以,如果你们中的任何人能在这里帮助我或为我指明方向,我将不胜感激。

0 投票
1 回答
76 浏览

azure - 无法从 ThreadX 客户端与 Azure IoTHub 通信

我们正在创建一个应用程序,其中基于 ThreadX 的客户端将与 IOT Hub 进行通信。进行了适当的适配器更改,以使客户端与 IOT Azure C SDK 一起工作。我们观察到客户端在 Wire Shark 错误时抛出的“Bad Certificate”错误。通过wireshark,我们确定客户端发送“Hello”,服务器(IOT Hub)响应“Server Hello,Certificate,Certificate Request,Server Hello Done”。当客户端尝试验证服务器证书时,我们会看到“错误证书”被抛出。我们在邮件中附上了我们添加到客户端的根证书和我们看到的表明证书错误的wireshark。

设备错误

0 投票
2 回答
919 浏览

postgresql - 2020年AWS RDS公有证书更新准备(Postgres)

我有一个与 Postgres 数据库的 Amazon rds-ca-2015-root证书到期有关的问题,该证书计划于 2020 年 3 月 5 日到期。我想准备我的 java 客户端软件组件,以便它们在服务器时的停机时间最短切换到新的 2020 证书。在使用 SSL 对服务器进行身份验证时,客户端使用带有 RDS 证书的 jks 信任库。我假设 2020 年证书将在 30 天左右之前提供,即 2020 年 2 月 5 日。

这是我认为我应该做的,我正在寻找一些确认这确实会按我的预期工作:

  1. 在到期前的某个时间,使用包含 2015 证书和 2020 证书的信任库文件向客户端推送软件更新。客户端应该继续愉快地根据 2015 证书进行身份验证。新证书具有不同的签名/指纹,不会匹配。它应该被忽略。

  2. 在即将到期之前,修改 RDS 实例以使用 2020 证书。需要重新启动服务器。然后,客户端将匹配 2020 证书,忽略签名不再匹配的 2015 证书。停机时间仅限于重新启动服务器。

  3. 稍后,使用删除 2015 证书的信任库向客户端推送新更新。

这是正确的方法吗?是否有任何理由认为在 #1 中,Java 客户端将尝试对 2020 证书进行身份验证但失败,因为它与相同的主题和颁发者匹配?或者相反,在#3 中,他们尝试验证 2015 年证书但由于字段相同而失败?

我想以另一种方式提出问题,客户端(java或其他)是否可以持有两个用于服务器身份验证的公共证书,其中一个已过期或尚未有效,但两者都引用相同的主题和颁发者,甚至可能拥有如果亚马逊不轮换他们的密钥,则使用相同的公钥(尽管我认为最佳实践表明他们会这样做)。

0 投票
1 回答
1634 浏览

openssl - 如何使用 Openssl 制作自签名 RSA_PSS_RSAE 证书

我想制作如下证书。rsassaPss 作为签名算法,rsaEncryption 作为公钥算法。

我尝试了以下操作,但结果都相同。

1

2

谁能帮我?

0 投票
1 回答
144 浏览

java - Java 是“无法找到有效的证书”,尽管 TrustStore 包含根证书

我正在尝试使用向“ https://api.ecs.echa.europa.eu ”发送 HttpRequest

执行此代码我得到javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

现在我已经通过将证书添加到我的 java 信任库中找到了解决此问题的方法$JAVA_HOME/jre/lib/security/cacerts

我仍然不明白,为什么这是必要的:

特定网站 ( https://api.ecs.echa.europa.eu ) 使用根证书DigiCert Global Root CA,该证书已包含在 java 信任库中。为什么这还不够?

向使用此根证书的其他网站发送请求确实有效...

谢谢你的帮助 :)

0 投票
1 回答
401 浏览

ssl - 向 mitmproxy 添加其他受信任的根 CA 证书

我正在尝试配置 mitmproxy 以便它接受某些默认情况下不受信任的上游服务器证书。

我不想使用该--ssl-insecure选项,因为它完全禁用了对上游连接的所有证书检查。

我尝试了ssl_verify_upstream_trusted_ca允许我指定一个存储证书的 PEM 文件的选项,问题是使用此选项不会将这些证书添加为额外的受信任证书,而是替换受信任的 CA 证书列表。因此使用此选项 mitmproxy 不再信任默认 CA 证书,只信任我指定的那些。由于默认受信任的 CA 证书由操作系统指定并定期更新,因此我不想排除它们。

如何为 mitmproxy 指定一组额外受信任的受信任根 CA 证书?