问题标签 [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.
ssl - 验证自签名证书的命令是否可以访问应用程序
再会,
我有 2 个应用服务器,比如说 App1 和 App2。
我在 App2 中有一个自签名证书,我将此自签名证书导入 App1。但是我的 App1 仍然无法连接到 App2 https url,它遇到了以下错误:
从 App1,我正在尝试使用命令来测试自签名证书,以验证我是否可以使用此证书访问 App2 https url。
如果命令连接成功,那么我可能会怀疑我将自签名证书导入 App1 的方式是错误的。有了这个,我可以更具体地知道问题是什么。
类似于使用命令加载证书,然后 curl -i 到 url?
我尝试谷歌,但无法获得命令,这样的命令存在吗?应用服务器部署在 RED HAT Jboss 中。
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
脚步
添加
/li>app.mylocaldomain.com
和app.mylocaldomain.com
到/etc/hosts
创建
/li>api/req.cnf
文件创建
/li>app/req.cnf
文件创建应用程序
/li>cert.key
和cert.pem
文件:创建API
/li>cert.key
和cert.pem
文件:将两个证书都加载到 Mac Keychain Access 并批准两者都受信任
这是钥匙串中批准的两个证书的工作结果:
配置应用程序 Webpack Dev Server 以通过 HTTPS 启动
/li>sudo yarn start
使用(在 npm 脚本中)启动应用程序webpack-dev-server
以允许使用443
端口这是工作结果:
通过 HTTPS 正确加载应用程序的位置。
请注意,省略
/li>sudo
会导致以下情况(或类似情况,具体取决于您的 Webpack Dev Server 设置):将 FE 服务器配置为通过 HTTPS 启动
/li>
/li>sudo yarn start --open --public api.mylocaldomain.com --port 443
使用(node lib/
在 npm 脚本中)启动 FE API 服务器
问题
上面的设置应该已经足够了,但是,调用 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
取决于各种设置排列。
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 服务,这就是我所看到的:
当我设置变量,再次直接执行脚本时,这就是我所看到的——网关仍然拒绝自签名证书:
ios - iOS App 不喜欢自签名 SSL 证书
我们开发了一个 iOS 应用程序,它在生产服务器上与我们的 API 配合良好,但与其他具有自签名 SSL 证书的服务器不能很好地配合,我搜索了很多解决方案,其中一些说向 APP 配置添加异常,一些说生成自签名证书,没有一个给出明确的分步答案。经过大量的研究/实验,我终于完成了,我在这里发布问题和答案,以防它也可以帮助其他人。
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/?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/?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
java - Android HttpsURLConnection 适用于模拟器上的自签名证书,但不适用于真实设备
我使用此命令为在 EC2 实例上运行的 nginx 服务器创建自签名证书
作为通用名称(例如服务器 FQDN 或您的姓名),我使用了 EC2 实例的公共 DNS,类似于 ec2-somenumber.region.compute.amazonaws.com
我使用此代码来解决信任问题,我将 selfsigned.crt 复制到应用程序原始文件夹并以这种方式使用它:
现在它在模拟器上完美运行,但是当我尝试在真实设备上调试它时,它给了我这个错误:
我在stackoverlow上阅读了很多问题,实际上我不想覆盖hostnameVerifier,直到我明白它为什么在模拟器上工作而不是在真实设备上工作。
你有什么建议吗?
谢谢
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 以上述指定方式发送数据。
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,但仍然遇到同样的问题。通过浏览器使用该应用程序时连接有效,但适用于超测。
这是此代理配置的错误:
nginx - 用于安全服务间通信的信任自签名 SSL/TLS 证书
我们有一个在服务器上运行的微服务编排。nginx 服务充当微服务之间的代理。我们希望使用我们的自签名证书在 SSL 上进行所有通信。
我们希望将我们的私有 CA 添加到每个服务(在 Debian Buster 上运行),以便认为它在该服务中的任何地方都有效。我们生成我们的服务器证书和 CA,如下所示:
但是,我们不能让微服务将证书视为有效并信任它。在微服务中使用 Python 的请求库发出 get 请求时,会抛出如下异常:
到目前为止,我们已经尝试过:
- 将证书复制到 /usr/share/ca-certificate/ 并运行
sudo dpkg-reconfigure ca-certificates
and/orupdate-ca-certificates
命令。 - 将
REQUESTS_CA_BUNDLE
环境变量设置为/path/to/internal-CA-cert.pem
- 将
SSL_CERT_FILE
环境变量设置为/path/to/internal-CA-cert.pem
唯一可行的解决方法是设置valid=False
in requests.get(url, params=params, verify=False, **kwargs)
,以忽略 SSL 证书的有效性。但是,这不是我们想要为所有微服务和通信实现的工作流程。
php - 自签名证书和 PHP 需要
我有一个 php 站点的实例,它需要在我公司的内部网上的 https 链接后面运行一个脚本。https 链接使用的是自签名证书。我已尝试更新 cacert.pem 以允许它,但我仍然得到以下信息:
如果我使用 cURL,我会绕过这个请求的 ssl,但我不能。
有任何想法吗?