随首应用程序在WEB和后台服务器暴露接口的安全重视,证书成了越来越多人的需求,但知名证书的申请对于普通开发者而言是一个不小的开支,动辄上千甚至上万,这是无法承受的,对于寻求免费证书,大家都起着不一样的弯路,我也一样,在这里,我向大家介绍一下我最终使用的两个免费证书来源。
如果有接触过微信小程序开发的朋友一定会知道,微信的小程序开发是需要有HTTPS支持的,否则是不可能上传到服务器的,更别说提交审核,在本地开发的时候,可以通过勾选他的“不校验安全域名、web-view 域名、TLS 版本以及 HTTPS 证书”来避开应用的请求验证,因此并没有影响,在发布的时候,就可以通过腾讯云的产品“SSL证书管理”来颁发一个“TrustAsia”的证书,给微信后台API提供安全。
但是这里有一个非常大的限制,就是所申请的证书不能证对泛域名,只能是子域名,因此,对于多个子域名的用户来说,只能申请多个;第二个限制就是每一个主域名只能申请最多二十次;第三个限制是每一次申请的证书有效期只能一年。对于普通开发者,如果只使用一个的话,在当前的限制的下,是可以使用20年的,完全足够了。
相对于腾讯云而言,当前的Let’s Encryp就要好很多了,在进入官网之后,去查看他的文档,他推荐我们使用Certbot来安装(We recommend that most people with shell access use the Certbot ACME client.),接下来的所有过程,都是在Certbot的指引下完成的,选择操作系统,选择WEB服务器,通过文档安装certbot,这就不多说了,文档写得也很明白,例如我的服务器操作系统是Centos7,使用的WEB服务器是nginx, 我的选项即:
在安装完成之后,原有的nginx配置文件会被certbot添加部分配置:
如果你选择了将原有的http重定向到https的话,还会有:
这里需要提到两个你可能会遇到的坑!
raise ImportError("'pyOpenSSL' module missing required functionality. "
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
必然是自己的版本过低,才会提示需要更高的版本才能运行,由于本地安装的版本是v0.13,所以,这里需要升级,但Centos的仓库里并没有比0.13更高的版本,只能自己手动升级,先把原来的卸载掉。
yum erase pyOpenSSL
然后去下载更高版本,我打了一圈,在http://rpm.pbone.net/index.php3/stat/4/idpl/31446026/dir/centos_7/com/pyOpenSSL-0.15.1-1.el7.noarch.rpm.html找到了更高的版本,你可以先在本机上尝试点击一下,看哪一个是你能下载且适合的版本,我发现有些是无法访问的,在做这一些的时候,自己要多留个心眼儿便是!
wget ftp://mirror.switch.ch/pool/4/mirror/centos/7.4.1708/cloud/x86_64/openstack-pike/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
安装之后,再尝试,但可以往下走了!
如果依旧出错,可以试试:
yum install http://cbs.centos.org/kojifiles/packages/pyOpenSSL/16.2.0/3.el7/noarch/python2-pyOpenSSL-16.2.0-3.el7.noarch.rpm
2. python脚本执行时的UnicodeDecodeError
是啊,上一步才在说可以往下走了,为什么一执行,又报错了,错误信息如下:
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/certbot/auth_handler.py", line 127, in _solve_challenges
resp = self.auth.perform(all_achalls)
File "/usr/lib/python2.7/site-packages/certbot_nginx/configurator.py", line 969, in perform
http_response = http_doer.perform() File "/usr/lib/python2.7/site-packages/certbot_nginx/http_01.py", line 61, in perform
self.configurator.save("HTTP Challenge", True)
File "/usr/lib/python2.7/site-packages/certbot_nginx/configurator.py", line 899, in save
self.parser.filedump(ext='')
File "/usr/lib/python2.7/site-packages/certbot_nginx/parser.py", line 242, in filedump
out = nginxparser.dumps(tree)
File "/usr/lib/python2.7/site-packages/certbot_nginx/nginxparser.py", line 134, in dumps
return str(RawNginxDumper(blocks.spaced))
File "/usr/lib/python2.7/site-packages/certbot_nginx/nginxparser.py", line 98, in __str__
return ''.join(self)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 1: ordinal not in range(128)
太不幸了,这里该怎么办?,他其实错误里已经指明了错误的脚本是在“/usr/lib/python2.7/site-packages/certbot_nginx/nginxparser.py”
去系统里找到这个文件,在import的位置再加如下的代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
好了,这次是真的可以再往下走了!