问题标签 [self-signed-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 投票
1 回答
16 浏览

ssl - 验证自签名证书的命令是否可以访问应用程序

再会,

我有 2 个应用服务器,比如说 App1 和 App2。

我在 App2 中有一个自签名证书,我将此自签名证书导入 App1。但是我的 App1 仍然无法连接到 App2 https url,它遇到了以下错误:

从 App1,我正在尝试使用命令来测试自签名证书,以验证我是否可以使用此证书访问 App2 https url。

如果命令连接成功,那么我可能会怀疑我将自签名证书导入 App1 的方式是错误的。有了这个,我可以更具体地知道问题是什么。

类似于使用命令加载证书,然后 curl -i 到 url?

我尝试谷歌,但无法获得命令,这样的命令存在吗?应用服务器部署在 RED HAT Jboss 中。

0 投票
0 回答
537 浏览

javascript - 在本地 Node.js/Express/React 开发中使用自签名证书

该问题涉及在本地全栈(在本例中为 React 应用程序和 Node.js FE 服务器)开发中使用自签名证书。

请注意,问题本身可能并不像它所暗示的那么复杂。简单地说,我需要描述整个设置以避免处理不相关的琐碎建议。此外,当/如果问题得到回答时,它应该作为这种努力的一个很好的起点。

原因

许多功能,包括但不限于共享签名 cookie、http2 等...,只能通过 HTTPS 工作或需要兄弟/父域设置,这就需要创建证书并同时运行 Webpack Dev Server 和 Nodejs FE 服务器通过 HTTPS(本地)在显式域上而不是在localhost.

请注意,该问题特定于本地开发,因为它在生产中使用非自签名证书和 HTTPS 正确配置。

假设

虽然可以使用 Let's Encrypt 之类的东西创建“普通”证书,但并不总是可行或可取的(公司政策或类似政策)。

因此,出于纯粹的学术目的,我们选择使用自签名证书

设置

操作系统:Mac Catalina 10.15.2 节点:13.8

有两个子域:

  • app.mylocaldomain.com它通过 Webpack Dev Server 托管 React 应用程序
  • api.mylocaldomain.com它通过 Node.js + Express 托管 FE API 服务器

需要

能够从 向 发出 HTTPS AJAXhttps://app.mylocaldomain.com请求https://api.mylocaldomain.com/some-route

脚步

  1. 添加app.mylocaldomain.comapp.mylocaldomain.com/etc/hosts

    /li>
  2. 创建api/req.cnf文件

    /li>
  3. 创建app/req.cnf文件

    /li>
  4. 创建应用程序 cert.keycert.pem文件:

    /li>
  5. 创建API cert.keycert.pem文件:

    /li>
  6. 将两个证书都加载到 Mac Keychain Access 并批准两者都受信任

    这是钥匙串中批准的两个证书的工作结果:

    在此处输入图像描述

  7. 配置应用程序 Webpack Dev Server 以通过 HTTPS 启动

    /li>
  8. sudo yarn start使用(在 npm 脚本中)启动应用程序webpack-dev-server以允许使用443端口

    这是工作结果:

    在此处输入图像描述

    通过 HTTPS 正确加载应用程序的位置。

    请注意,省略sudo会导致以下情况(或类似情况,具体取决于您的 Webpack Dev Server 设置):

    /li>
  9. 将 FE 服务器配置为通过 HTTPS 启动

    /li>
  10. sudo yarn start --open --public api.mylocaldomain.com --port 443使用(node lib/在 npm 脚本中)启动 FE API 服务器

    /li>

问题

上面的设置应该已经足够了,但是,调用 AJAX 请求https://api.mylocaldomain.com/status(是的,路由存在)会在 Chrome 控制台中导致以下(为清楚起见而删节)错误:

如果您https://api.mylocaldomain.com/status直接在 Chrome 中访问,您将获得以下信息:

在此处输入图像描述

这表明 App 和 API 的证书以某种方式混合在一起,但我多次以各种排列方式运行上述步骤,但看不到会发生这种情况。也许/etc/hosts映射搞砸了?这是有道理的,因为两者app.api.都被映射到127.0.0.1创建混合中。但是,我对如何解决这个问题感到矛盾。

事实上,如果经过检查,Chrome 似乎(至少)在访问 API 时会加载 App 证书。为什么?

按照上面的链接会导致:

在此处输入图像描述

调用curl -XGET https://api.mylocaldomain.com/status会导致以下错误:

这很奇怪,正如上面 APIapi.mylocaldomain.com中明确定义的那样。req.cnf


建议?

我认为这是一件极其微不足道的事情,我会因为错过它而感到尴尬,但经过多次通过和重试后,它可能已经进入了我的盲点。

附录 A。

创建多域*.mylocaldomain.com证书也不起作用,错误是“无效的公用名”或Invalid Host header取决于各种设置排列。

0 投票
0 回答
347 浏览

node.js - https 自签名证书上的 Express Gateway 错误,即使在 Node 中禁用了证书验证

我正在玩耍和学习Express Gateway。入门指南要求我调用 https 端点。我的组织通过一个中间箱运行所有请求,该中间箱嗅探 https 内容并将其根证书安装在我们的机器上。因此,基本上所有 https 有效负载都使用组织自己的证书进行签名。

基本上,当 Express Gateway 进行调用并看到它不信任的证书时,它会引发错误。我尝试设置NODE_TLS_REJECT_UNAUTHORIZED=0为暂时禁用证书验证,但我仍然看到错误并且连接被拒绝:

在此处输入图像描述

如何在 Express Gateway 中暂时禁用证书验证?

作为一个长期的解决方案,我看过一篇关于如何通过设置环境变量让Node 信任我的操作系统证书NODE_EXTRA_CA_CERTS的帖子,但我不知道在我的系统上指向哪个文件作为证书文件

更新 1 (2020.26.02)

我听从了维琴佐的建议,并尝试直接调用脚本而不是通过 annpm script但它不起作用。我在server.js文件顶部添加了一个控制台日志以查看NODE_TLS_REJECT_UNAUTHORIZED. 当我不设置变量时,我尝试代理到 https 服务,这就是我所看到的:

在此处输入图像描述

当我设置变量,再次直接执行脚本时,这就是我所看到的——网关仍然拒绝自签名证书:

在此处输入图像描述

0 投票
1 回答
177 浏览

ios - iOS App 不喜欢自签名 SSL 证书

我们开发了一个 iOS 应用程序,它在生产服务器上与我们的 API 配合良好,但与其他具有自签名 SSL 证书的服务器不能很好地配合,我搜索了很多解决方案,其中一些说向 APP 配置添加异常,一些说生成自签名证书,没有一个给出明确的分步答案。经过大量的研究/实验,我终于完成了,我在这里发布问题和答案,以防它也可以帮助其他人。

0 投票
0 回答
239 浏览

https - esp32、esp32_https_server 库、自签名证书、cors 和 499 状态码

我正在做一个 ESP32 项目。我的目标之一是使用 javascript fetch 或 XMLHttpRequest() 从网站与 ESP32 通信。

ESP32 连接到我的本地网络,我正在使用 esp32_https_server 库。它使用浏览器指示为有效的自签名证书(但由于自签名证书而发出警告“连接不受保护”)。该网站具有 CA 证书并且是安全的。

在测试中,esp32 通过 USB 连接到我的电脑,理想情况下我希望它独立。

我遇到的问题是我似乎无法连接到 esp32。我不断收到状态码 499 错误。

我的问题是:

1) 我如何从安全网站成功连接到 esp32 服务器以从 esp32 获取数据?

2) 当 esp32 没有通过 USB 电缆连接到我的电脑时,我该怎么做?

请在下面查看有关 esp32 设置和响应的更多信息。

这是 esp32 代码:

这是处理“upload_current_temp”请求的代码:

而且在 setUp() 我有这一行:

使用时:

我得到这些错误(在歌剧中):

499(请求已被杀毒软件禁止)

已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

在铬:

已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

使用这些标题(歌剧):

请求网址:https ://192.168.0.102/?action=upload_current_temp 请求方法:GET

状态码:499 请求已被杀毒软件禁止

远程地址:192.168.0.102:443

推荐人政策:降级时无推荐人

缓存控制:无存储,无缓存,必须重新验证,max-age=0

连接:关闭

内容长度:52266

内容类型:文本/html;字符集=utf-8

过期时间:1999 年 12 月 4 日星期一 21:29:02 GMT

Pragma:无缓存

接受:/

接受编码:gzip、deflate、br

接受语言:en-US,en;q=0.9

连接:保持活动

主机:192.168.0.102

来源:https ://istimuli.co.uk

推荐人:https ://istimuli.co.uk/?code=66b72f8e-400c-4adb-ad42-f4efec391d06

Sec-Fetch-Dest:空

Sec-Fetch-Mode: cors

Sec-Fetch-Site:跨站点

用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 OPR/67.0.3575.79

行动:upload_current_temp

使用时:

我在歌剧中得到这些错误:

499(请求已被杀毒软件禁止)

已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

在 chrome 中:已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

这些是标题(歌剧):

1 个请求

已传输 51.3 KB

51.0 KB 资源

请求网址:https ://192.168.0.102/?action=upload_current_temp

请求方法:选项

状态码:499 请求已被杀毒软件禁止

远程地址:192.168.0.102:443

推荐人政策:降级时无推荐人

缓存控制:无存储,无缓存,必须重新验证,max-age=0

连接:关闭

内容长度:52266

内容类型:文本/html;字符集=utf-8

过期时间:1999 年 12 月 4 日星期一 21:29:02 GMT

Pragma:无缓存

接受:/

接受编码:gzip、deflate、br

接受语言:en-US,en;q=0.9

访问控制请求标头:内容类型

访问控制请求方法:GET

连接:保持活动

主机:192.168.0.102

来源:https ://istimuli.co.uk

推荐人:https ://istimuli.co.uk/?code=66b72f8e-400c-4adb-ad42-f4efec391d06

Sec-Fetch-Dest:空

Sec-Fetch-Mode: cors

Sec-Fetch-Site:跨站点

用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36 OPR/67.0.3575.79

行动:upload_current_temp

0 投票
1 回答
93 浏览

java - Android HttpsURLConnection 适用于模拟器上的自签名证书,但不适用于真实设备

我使用此命令为在 EC2 实例上运行的 nginx 服务器创建自签名证书

作为通用名称(例如服务器 FQDN 或您的姓名),我使用了 EC2 实例的公共 DNS,类似于 ec2-somenumber.region.compute.amazonaws.com

我使用此代码来解决信任问题,我将 selfsigned.crt 复制到应用程序原始文件夹并以这种方式使用它:

现在它在模拟器上完美运行,但是当我尝试在真实设备上调试它时,它给了我这个错误:

我在stackoverlow上阅读了很多问题,实际上我不想覆盖hostnameVerifier,直到我明白它为什么在模拟器上工作而不是在真实设备上工作。

你有什么建议吗?

谢谢

0 投票
1 回答
501 浏览

aws-sdk - AWS IoT 连接错误:aws-iot-device-sdk 提供的“caCert”选项无效

我在 AWS 中使用由我的 CA 签名的设备证书预置了一个设备。另外,我之前已经在 AWS 中注册了我的 CA 和 verifyCert。

现在当我发送数据时,在选项中,

我得到以下错误

抛出新错误(异常。INVALID_CA_CERT_OPTION);^ 错误:提供的“caCert”选项无效。

谁能让我知道我在上面的代码片段中做错了什么?

Edit1:在选项中进行更正后,以下是代码:

device.on('connect') 中的语句没有被执行。我只能看到正在打印“Invoking on connect”

编辑2:问题已解决!!!

在创建设备时,我必须将 Policy 附加到它。然后我可以通过带有证书的 MQTT 以上述指定方式发送数据。

0 投票
1 回答
2424 浏览

node.js - NodeJS axios 请求自签名在浏览器中有效,但在开玩笑的超级测试案例中无效

我正在构建一个调用外部 API 的 NodeJS 应用程序。外部 API 使用自签名证书。我尝试设置环境变量process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'。这可以在正常使用应用程序时忽略证书验证。但是,在使用 Jest Supertest 代理调用 NodeJS 路由时,对同一端点的请求不起作用。

运行 Jest Supertest 案例时出现证书验证错误。使用 Supertest 代理发送请求时,有没有办法接受自签名证书?

NodeJS 内部路由

通过浏览器访问路由时有效,但在运行 Jest Supertest 时无效。内部路由是 /internal 并且有效,但是当该代码随后向具有自签名证书的外部 API 发送请求时,自签名证书会导致 500 错误消息。

NodeJS 控制器

向外部 API 发出 axios 请求的包装函数

JEST 超测

导致证书错误的测试

更新:

我尝试在 axios 代理配置中删除 NODE_TLS_REJECT_UNAUTHORIZED 并将rejectUnauthorized 设置为false,但仍然遇到同样的问题。通过浏览器使用该应用程序时连接有效,但适用于超测。

这是此代理配置的错误:

0 投票
1 回答
826 浏览

nginx - 用于安全服务间通信的信任自签名 SSL/TLS 证书

我们有一个在服务器上运行的微服务编排。nginx 服务充当微服务之间的代理。我们希望使用我们的自签名证书在 SSL 上进行所有通信。

我们希望将我们的私有 CA 添加到每个服务(在 Debian Buster 上运行),以便认为它在该服务中的任何地方都有效。我们生成我们的服务器证书和 CA,如下所示:

但是,我们不能让微服务将证书视为有效并信任它。在微服务中使用 Python 的请求库发出 get 请求时,会抛出如下异常:

到目前为止,我们已经尝试过:

  • 将证书复制到 /usr/share/ca-certificate/ 并运行sudo dpkg-reconfigure ca-certificatesand/orupdate-ca-certificates命令。
  • REQUESTS_CA_BUNDLE环境变量设置为/path/to/internal-CA-cert.pem
  • SSL_CERT_FILE环境变量设置为/path/to/internal-CA-cert.pem

唯一可行的解​​决方法是设置valid=Falsein requests.get(url, params=params, verify=False, **kwargs),以忽略 SSL 证书的有效性。但是,这不是我们想要为所有微服务和通信实现的工作流程。

0 投票
0 回答
72 浏览

php - 自签名证书和 PHP 需要

我有一个 php 站点的实例,它需要在我公司的内部网上的 https 链接后面运行一个脚本。https 链接使用的是自签名证书。我已尝试更新 cacert.pem 以允许它,但我仍然得到以下信息:

如果我使用 cURL,我会绕过这个请求的 ssl,但不能。

有任何想法吗?