HTTPS可以对网页传输的数据进行加密,并提供可靠的验证方法,保证了传输机密数据(如密码,身份证号码等)的安全性,同时防止第三方劫持和插入广告。可是道高一尺魔高一丈,部分不良ISP已经开发出了“HTTPS降级劫持”这种操作,可以把用户的https请求降级为http页面,对于部分强制https的网站,甚至还有反代出http的界面这种丧心病狂的操作。因此HTST(HTTP Strict Transport Security)应运而生,HSTS是一个http响应头,告诉浏览器我的网站必须要使用https,但是如何把HSTS传递给用户呢?一般来说有两种方案
1.网页自带https响应头,这样成功加载一次hsts响应头后就不会被劫持。但是这种方案也有可能被http劫持
2.使用HSTS-Preload方案,浏览器本身自带使用hsts的域名,强制使用https,可以说是目前最安全的方案了。不过HSTS-preload加入很慢,而且要求高。
我们可以看https://hstspreload.org/的要求:
- Serve a valid certificate.
- Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.
- Serve all subdomains over HTTPS.
- In particular, you must support HTTPS for the
www
subdomain if a DNS record for that subdomain exists.
- In particular, you must support HTTPS for the
- Serve an HSTS header on the base domain for HTTPS requests:
- The
max-age
must be at least31536000
seconds (1 year). - The
includeSubDomains
directive must be specified. - The
preload
directive must be specified. - If you are serving an additional redirect from your HTTPS site, that redirect must still have the HSTS header (rather than the page it redirects to).
- The
我们看其中最重要的要求:
max-age,代表接下来的时间内都必须要用https
includeSubDomains,代表子域名也必须使用https
那么问题来了,宝塔面板默认可是http的,即使开启了面板ssl也是自签证书,肯定不符合hsts要求,那么应该怎么办?其实宝塔支持自定义证书的,而且很方便开启,可以直接跳过自签证书。
1.在宝塔设置页面中,点击面板SSL,注意点击文字,不是开关

2.输入自定义证书,可以根据域名自行申请,或者直接使用域名的野卡证书。

3.开启面板SSL(这次是点击开关)
通过上述步骤操作后,宝塔面板便只能通过https访问了。而且直接是可信证书,跳过了宝塔自签的证书。
CentOS6用于好像无法使用面板SSL,貌似是pip版本过低,导致pip无法安装openssl。建议使用CentOS7系统。
如果有多个域名怎么通过面板设置-面板SSL设置https?
签一个包含多域名的证书。
此处只能填写一个证书是吗?
对的。
什么是key,什么是pem?
我用openssl生成的只有pem文件和csr文件
建议去申请一个腾讯云的免费证书。openssl的自签证书和宝塔自己生成的也差不多,浏览器不信任。
腾讯云生成的证书里面,用nginx文件夹下面的就行