ssl - 使用 TLS 和 PEM 证书从 Axios.js 到 Flask Python HTTPS 服务器的 HTTPS 请求
问题描述
我无法执行从 Axios.js 到 Flask HTTPS 服务器的 HTTPS 请求。
我认为原因可能与 Axios.js 对象的配置方式有关,因为我看到请求使用的是 HTTPS + PEM 证书,但我看不出 Axios.js 实例配置错误的任何原因(请参阅https://github.com/axios/axios#request-config)。
我在运行 Javascript 代码时看到的错误是Error: self signed certificate
,这对我来说很奇怪,因为我认为 HTTPS 客户端应该使用PEM
自签名证书(例如,像 Web 浏览器)。在此处检查 HTTPS 代理https://nodejs.org/api/https.html#https_https_request_url_options_callback和此处https://nodejs.org/api/tls.html#tls_tls_connect_options_callback似乎我应该设置rejectUnauthorized
为false
. 如果我这样做然后删除这些字段cert
和key
,那么代码可以工作,但这意味着根本不使用 TLS,所以我不确定 TLS 的意义何在。
使用 Axios.js 的 Javascript HTTP(S) 客户端:
const agent = new https.Agent({
rejectUnauthorized: true,
cert: fs.readFileSync(`${__dirname}/../../../ssl_cert.crt`),
key: fs.readFileSync(`${__dirname}/../../../ssl_cert.key`),
})
const myApi = axios.create({
baseURL: 'https://localhost:5000', // the Flask server
timeout: 10000,
headers: {
'Content-Type': 'application/json'
},
httpsAgent: agent,
});
已使用以下命令创建证书:
# generate the 2 files: crt and key
openssl req -newkey rsa:4096 -nodes \
-keyout ssl_cert.key -x509 -days 365 -out ssl_cert.crt \
-subj "/C=GB/ST=England/L=London/O=foo/CN=foo"
# inspect the crt file (e.g. check the expiry date)
openssl x509 -text -noout -in ssl_cert.crt
thecrt
和key
start with-----BEGIN
所以我认为它们应该已经是PEM
格式。AFAIK在执行来自 Axios.js 客户端的 HTTPS 请求时,我可以使用该crt
文件作为证书。PEM
这是作为后端响应 Javascript 前端的 Python Flask 服务器:
app = Flask(__name__)
ssl_context = (
"{...}/../ssl_cert.crt",
"{...}/../ssl_cert.key",
)
app.run(host='0.0.0.0', debug=True, ssl_context=ssl_context)
- 这些证书有什么问题?
- 如何在 Javascript 客户端和 Python 服务器之间建立安全连接 (HTTP + S)?
解决方案
推荐阅读
- python - 在python open csv中的字典内建立一个列表
- php - 在 Woocommerce 中允许延期交货并通知客户特定产品类别
- javascript - React Firebase 时间戳使用
- php - 从复选框传递数组并将多行插入数据库 CodeIgniter
- kubernetes - 如何在 `kubernetes.io/hostname` nodeSelector 中提供主机名列表
- arrays - 如何使用嵌套数组格式化 JSONArray
- c++ - CudaMalloc 在分配内存时失败
- c# - C# Linq Query 选择所有以字符串开头的枚举
- android - onCreateOptionsMenu() 方法在使用支持搜索小部件时抛出空指针
- wordpress - Wordpress - /page/2 不工作,但 /?paged=2 是