Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有JSONRPC的烧瓶,带有不可验证证书的HTTPS服务器_Python_Flask - Fatal编程技术网

Python 带有JSONRPC的烧瓶,带有不可验证证书的HTTPS服务器

Python 带有JSONRPC的烧瓶,带有不可验证证书的HTTPS服务器,python,flask,Python,Flask,下面的示例演示了如何使用Flask进行JSON RPC调用。我所有的东西都可以使用HTTP服务器,但我想使用HTTPS服务器。我还想使用非可信来源的证书/密钥,它们是我自己的。在代码的某些部分,我使用请求,我可以设置verify=False,并且这些请求可以工作 但是我似乎找不到从flask_jsonrpc.proxy import ServiceProxy关闭验证的方法 客户端代码如下所示 from flask_jsonrpc.proxy import ServiceProxy proxy

下面的示例演示了如何使用Flask进行JSON RPC调用。我所有的东西都可以使用HTTP服务器,但我想使用HTTPS服务器。我还想使用非可信来源的证书/密钥,它们是我自己的。在代码的某些部分,我使用
请求
,我可以设置
verify=False
,并且这些请求可以工作

但是我似乎找不到从flask_jsonrpc.proxy import ServiceProxy关闭验证的方法

客户端代码如下所示

from flask_jsonrpc.proxy import ServiceProxy

proxy = ServiceProxy('https://127.0.0.1:6600/api')
r = proxy.Test.ping(username='name', password='password')
app.run(host="0.0.0.0", port=6600, debug=False, ssl_context=('cert.pem', 'key.pem'))

如果我使用HTTP(即将服务器更改为HTTP),上面的代码就可以正常工作。查看一些
ServiceProxy
代码,我没有看到将
verify=False
设置为任何内容的方法。。。或者有没有办法更改
ServiceProxy
使用的
标题
,以实现设置

我得到的错误是,
,这是我从
请求中得到的
,除非我设置
验证=False
(我这样做,它们工作)

更多背景:

1) 在此设置中,客户端和服务器位于独立的网络上,而不是internet上。我认为使用HTTPS端点可以“免费”得到的是这些服务器/客户端之间的数据包加密。由于这些计算机不在互联网上,我不认为证书可以通过外部验证,和/或我不希望证书在一两年内过期

2) 在此设置中,Flask服务器用于“在生产中”运行客户端和服务器。我知道这是不推荐的

3) 烧瓶应用程序是这样启动的

from flask_jsonrpc.proxy import ServiceProxy

proxy = ServiceProxy('https://127.0.0.1:6600/api')
r = proxy.Test.ping(username='name', password='password')
app.run(host="0.0.0.0", port=6600, debug=False, ssl_context=('cert.pem', 'key.pem'))

4) 证书由以下内容生成:

openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

HTTPS应该使用反向代理来实现,比如
nginx
。浏览一下您链接的json_rpc文档,
ServiceProxy
是一个用于测试的类,因此您应该使用它访问非https端点。另外,在请求上设置
verify=False
,只会完全忽略证书,这更糟糕的是一个安全问题,充其量只是一个糟糕应用程序体系结构的指示器。如果没有更多关于SSL配置的信息,当然还有更多的代码,这个问题很难给出建议。谢谢。提供了更多的背景资料。通过查看
ServiceProxy
代码,我没有看到
verify
暴露出来,因此这似乎是一条死胡同。