使用TLS和PEM证书从Axios.js向Flask Python HTTPS服务器发出HTTPS请求

时间:2019-09-10 12:49:56

标签: ssl flask https axios pem

我无法执行从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://nodejs.org/api/https.html#https_https_request_url_options_callback和这里https://nodejs.org/api/tls.html#tls_tls_connect_options_callback检查HTTPS代理,看来我应该将rejectUnauthorized设置为false。如果我这样做,然后删除那些字段certkey,则代码可以正常工作,但是那将意味着根本不使用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

crtkey都以-----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)?

0 个答案:

没有答案
相关问题