腾讯云http升到https
站点在这里,项目已上传至Git。随时都在掰弄,不保证能登录/手动滑稽
缘由
因为用了PWA,上面的”不安全“提示就让人非常不爽,而且据说也会限制PWA的功能,因此决定把服务器升到https
免费获取ssl
上腾讯云买就完了,选择域名型免费版,反正不要钱
下载证书,由于我使用的是apache2建站,因此选取其中apache文件夹中的三个文件传到服务器
手动安装
直接参考这位大佬的文章;一切都非常美好。
> ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
建立ssl专用配置文件到配置文件实装文件夹的软链接
实际上也可以直接用apache提供的命令a2ensite default-ssl.conf,效果一样
> sudo vim /etc/apache2/site-available/default-ssl.conf
修改如上文件中的如下配置;myWebsite修改成你的域名,地址指定到你放置三个密钥文件的地址;我把这三个密钥文件放在了/etc/ssl/certs/目录下
> ServerName www.<myWebsite>.com
> SSLCertificateFile /etc/ssl/certs/2_www.<myWebsite>.com.crt
> SSLCertificateKeyFile /etc/ssl/certs/3_www.<myWebsite>.com.key
> SSLCertificateChainFile /etc/ssl/certs/1_root_bundle.crt
修改完成后加载ssl并重启apache2
> sudo a2enmode ssl
> sudo service apache2 restart
智障错误
结果浏览器时报错ERR_SSL_PROTOCOL_ERROR,检查了一圈,发现我犯了一个非常愚蠢的错误,配置文件的软链写错了
在把/etc/apache2/sites-available/default-ssl.conf 映射到sites-enabled文件夹时不知道哪里写错了反正就是没连上,回头看感觉应该是用了相对地址,而软链必须写绝对地址。删了重写一次
ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
成功连上
PWA也没有不安全提示了
强制http跳转https的问题
在照着大佬们强制http链接rewrite到https过程中碰到的不可复现的错误
-
首先修改/etc/apache2/sites-available/000-default.conf,添加这三段指定任何网址重定向至https
在已经enable rewrite的前提下重启apache2,跳转https失败~ sudo a2enmode rewrite ~ sudo service apache2 restart
-
据说需要将/etc/apache2/apache2.conf中的AllowOverride的None改为ALL,原理未知,因为也有人说不改也行
实测后依然跳转https失败 -
在这位大佬这里看到的在对000-default.conf的修改中需要指定重定向301
实测成功跳转! -
但是等我把AllowOverride还原成None,[L, R=301]还原成[L,R],即还原到第一步的状态的时候,又可以成功跳转了,无法理解。(21.03.16.PS:现在可以理解了,因为PWA的本地缓存功能,当从http成功跳转过一次https之后,以后无论如何修改服务器配置,只要用原来的浏览器再次访问,则都会在本地缓存的作用下直接被传送到https,即使服务器apache关闭了也能跳,尴尬了)
Flask从https调用
- 完成后发现服务器端用flask写的http接口不接受这个https页面的请求,会报一个因为安全因素导致request blocked的错,所以需要在后端flask.py中同样指定密钥,并将接口请求url改成”https://“开头
# flask.py文件中最后run的部分添加ssl_context参数 # 指向与上文相同的地址下的(2_crt,3_key)两个文件 # 文件1_root_bundle.crt不需要 if __name__=='__main__': app.run( host='0.0.0.0', port=5000 ssl_context=( '/etc/ssl/certs/2_www.<myWebsite>.com.crt', '/etc/ssl/certs/3_www.<myWebsite>.com.key' ) # <myWebsite>替换为自己的域名 )
彻底完成