我通过https连接测试Node.js应用程序,我为localhost创建了证书,
证书创建
$ openssl genrsa -out localhost.key 2048
$ openssl req -new -x509 -key localhost.key -out localhost.cert -days 3650 -subj /CN=localhost
在服务器中使用它,
var options = {
key: fs.readFileSync('./localhost.key'),
cert: fs.readFileSync('./localhost.cert'),
};
var http2 = require('http2');
var app = express();
const server = http2.createSecureServer( options, app);
server.listen({ host: app_host, port: port});
$ node server.js
Tested using simple curl command as,
$ curl -k https://localhost:9000/getcpuinfo
{"hw": ...}
" -k"选项是忽略证书验证步骤。
但如果我尝试使用蟒蛇的请求'模块如下图所示请求失败, $ python 导入请求
requests.get(" https://localhost:9000/getcpuinfo&#34) requests.exceptions.SSLError :("握手不好:错误([(' SSL例程',' tls_process_server_certificate','证书验证失败')], )",)
所以我用'验证'发出请求的选项,它仍然失败。
requests.get(" https://localhost:9000/getcpuinfo",verify = False) requests.exceptions.SSLError :("糟糕的握手:SysCallError(-1,'意外的EOF')",)
我做错了什么?如何使用'请求'解决此问题?模块&#39 ;?不应该验证'阻止检查?
答案 0 :(得分:0)
您无法通过localhost生成https证书。
答案 1 :(得分:0)
Python请求模块不连接到HTTP / 2服务器,它只支持HTTP / 1.1:
请求允许您发送有机,草地 HTTP / 1.1请求,而无需手工操作。无需手动向网址添加查询字符串,也无需对POST数据进行表单编码。由于urllib3,保持活动和HTTP连接池是100%自动的。
如果您使用HTTP / 2支持编译curl,那么它将起作用。在大多数Linux发行版和MacOS上预装的curl软件包都没有,并且可能无法正常工作。
由于HTTP/2 support in Node是实验性的,并且客户支持在现代网络浏览器之外非常糟糕,我建议您不要在此时使用它,除非您专门针对网络浏览器或想要使用HTTP /支持2的Web服务器,可以同时支持HTTP / 2和HTTPS。
如果确实需要从Python连接到HTTP / 2服务器,那么连接到node.js HTTP / 2服务器的(也是不稳定的)hyper
module。它目前为doesn't allow you to disable certificate verification,因此它不会成为请求的替代品。
答案 2 :(得分:0)
似乎有一个实用程序作为nghttp2的一部分称为' h2load'这两个协议的开箱即用(http / 1和http / 2)。感谢所有答案/提示。
https://nghttp2.org/documentation/h2load-howto.html#basic-usage