前情提要
最近做一个项目,局域网内开发一台华为机器,但是机器上部署了Nginx负载均衡,众所周知Nginx部署完成以后会强制https
。
遇见了什么问题
欧拉机器上的证书是华为域名的证书,由于我们使用局域网,局域网内的地址是192
开头,此证书在局域网域名内失效,因而通过https
方式访问时会出现风险提示。
华为的证书只管华为的域名
浏览器勉强还可以用,因为证书的风险提示可以手动忽略.
但是当使用Python测试相关的开发接口的时候,其会返回错误警告,比如使用内置
requests
的时候就会返回SSL Error
。
尝试解决
在这种情况下,解决SSL Error
的方法一般有两个
- 全局禁用SSL验证
方法是在加入如下代码:
#强制要求ssl有时候会抽风,为避免ssl证书问题,这里禁用ssl
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
- 在
requests
的可选参数中关闭SSL验证
requests.get(url,verify = False)
或者依照请求方式的不同
requests.post(url,data,verify = False)
结果呢?不报错了,直接返回404
,啊,被拒绝了!!!
'<html>\r\n<head><title>404 Not Found</title></head>\r\n<body>\r\n<center><h1>404 Not Found</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n'
Nginx真是个倔强的服务哈哈哈
查资料
发现已有大佬给出相关的参考
需要我们怎么做呢?
自己签发一个SSL证书,要求包含内网主机域名即可。
需要如下几步骤:
- 使用mkcert建立包含目标内网地址的的证书
- 使用openssl工具将证书转化成需要的格式
动手解决
1.安装mkcert
$ brew install mkcert
Downloading https://homebrew.bintray.com/bottles/mkcert-1.3.0.mojave.bottle.
######################################################################## 100.0%
==> Pouring mkcert-1.3.0.mojave.bottle.tar.gz
/usr/local/Cellar/mkcert/1.3.0: 6 files, 4.8MB
- 生成证书的pem文件和key_pem文件
$ mkcert -install
$ mkcert [可选多个ip地址,以空格相隔]
Using the local CA at "/Users/[用户名]/Library/Application Support/mkcert" ✨
Warning: the local CA is not installed in the Firefox trust store! ️
Run "mkcert -install" to avoid verification errors ️
Created a new certificate valid for the following names
- "IP地址1"
- “IP地址2”
- ……
The certificate is at "./证书文件.pem" and the key at "./证书KEY文件.pem" ✅
这两个证书文件的输出的目录一般是/Users/[用户名]
- 安装openssl
$ brew install openssl
- 找到openssl的文件夹地址
$ which openssl
- 双击目标文件夹内的openssl运行,进入openssl的shell
比如要把这两个证书文件转化为pfx格式,命令如下
OpenSSL> pkcs12 -export -out [输出文件.pfx] -inkey [证书KEY文件] -in [证书文件]
请注意以上文件最好都填绝对路径
例如:
OpenSSL> pkcs12 -export -out /Users/miraco/FriJob/HuaweiCam/cert/atlas_local.pfx -inkey /Users/miraco/localhost+2-key.pem -in /Users/miraco/localhost+2.pem
会让你设置密码
Enter Export Password:
Verifying - Enter Export Password:
得到文件:
导入局域网的服务器就行了。
网友评论