当前位置:   article > 正文

【从零建站4/n】错题集(已解决):腾讯云服务器apache2、flask从http升https;访问时浏览器报此站点连接不安全ERR_SSL_PROTOCOL_ERROR_腾讯云 域名 与此站点的连接不安全

腾讯云 域名 与此站点的连接不安全

腾讯云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
  • 1

建立ssl专用配置文件到配置文件实装文件夹的软链接
实际上也可以直接用apache提供的命令a2ensite default-ssl.conf,效果一样

> sudo vim /etc/apache2/site-available/default-ssl.conf
  • 1

修改如上文件中的如下配置;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
  • 1
  • 2
  • 3
  • 4

修改完成后加载ssl并重启apache2

> sudo a2enmode ssl
> sudo service apache2 restart
  • 1
  • 2

智障错误

结果浏览器时报错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
  • 1

成功连上
在这里插入图片描述
PWA也没有不安全提示了
在这里插入图片描述

强制http跳转https的问题

在照着大佬们强制http链接rewrite到https过程中碰到的不可复现的错误

  1. 首先修改/etc/apache2/sites-available/000-default.conf,添加这三段指定任何网址重定向至https
    在这里插入图片描述
    在已经enable rewrite的前提下重启apache2,跳转https失败

    ~ sudo a2enmode rewrite
    ~ sudo service apache2 restart
    
    • 1
    • 2
  2. 据说需要将/etc/apache2/apache2.conf中的AllowOverride的None改为ALL,原理未知,因为也有人说不改也行
    在这里插入图片描述
    实测后依然跳转https失败

  3. 这位大佬这里看到的在对000-default.conf的修改中需要指定重定向301
    在这里插入图片描述
    实测成功跳转!

  4. 但是等我把AllowOverride还原成None,[L, R=301]还原成[L,R],即还原到第一步的状态的时候,又可以成功跳转了,无法理解。(21.03.16.PS:现在可以理解了,因为PWA的本地缓存功能,当从http成功跳转过一次https之后,以后无论如何修改服务器配置,只要用原来的浏览器再次访问,则都会在本地缓存的作用下直接被传送到https,即使服务器apache关闭了也能跳,尴尬了)

Flask从https调用

  1. 完成后发现服务器端用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>替换为自己的域名
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

彻底完成

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/595702
推荐阅读
相关标签
  

闽ICP备14008679号