要为应用引入HTTPS,需要做的事情有如下:
1、证书申请
2、服务器部署https:利用证书,为Nginx服务器启用https服务
3、客户端器部署https
:图片、超链接等指向https
证书申请
数字证书有很多种,不同的等级不一样,功能也不同,越好的证书就越贵,还难申请,而免费的证书几个小时就可以申请下来的。
去哪里申请证书?
大部分网络提供商都提供证书申请服务,比如腾讯云、网易云、阿里云、百度云等,通过他们,我们可以申请各种等级的证书。
流程如下:
提交申请———>证书服务商(腾讯云、网易云…)提交到证书机构—–>证书机构根据提交的材料进行审核—->审核通过,颁发证书
审核
证书是和域名相关的,而验证提交者对域名的拥有权就是必须的,通常有两种方式:1、配置域名解析,2、根据要求,下载审核文件,放到网站根目录。
提示:具体的审核步骤看情况而定,不懂的联系客服就可以
服务器部署https
nginx支持https服务,其他的web服务器也支持,只是操作方式不一样,这里以nginx为例,在http{ }
里面加一个server块来提供HTTPS服务:
server {
listen 443;
server_name www.hainanhaiju.com;
#开启加密服务
ssl on;
index index.html index.htm;
#证书
ssl_certificate cert/214253394250168.pem;
#私钥
ssl_certificate_key cert/214253394250168.key;
#其他ssl相关的东西
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#网站根目录
root /phpstudy/webroot/thinkff/public;
#404页面
error_page 404 /404.html;
#配置路由相关的东西
location / {
#隐藏index.php,直接使用模块名字访问
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
index index.html index.htm index.php;
}
# 配置php FastCGI
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
看上面的配置,和HTTP服务相比,有如下不同:
1、监听端口从80变成443
listen 443;
2、一些HTTPS相关的东西
#开启加密服务
ssl on;
index index.html index.htm;
#证书
ssl_certificate cert/214253394250168.pem;
#私钥
ssl_certificate_key cert/214253394250168.key;
#其他ssl相关的东西
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
其中,cert/214253394250168.pem;
是我们的证书地址,cert/214253394250168.pem;
是私钥地址,这两个地址随便你命名,只要配置正确就行。
比如cert.pem
、cert.key
。
提示:关于FastCGI配置,这里不做讲解,如果你的应用不是PHP的,请参照具体脚本语言的配置进行修改
客户端部署https
做好证书申请和服务器部署之后,最后一项任何就是客户端部署了,一个网站,https部署主要有以下方面:
<a>
标签
<a>
标签不可以是http
,不会导致网站中有些页面的http的。
#跳转到https://当前域名/hello.html
<a href="/hello.html" target="_blank"></a>
<link>、<script>
CSS资源也要写成https的,通常的写法有三种:
#相对路径写法
<link rel="stylesheet" href="css/pc/index.css">
<script src="/js/base.js"></script>
相对路径写法对于引用站内资源是不错的,浏览器会自动补齐https://域名
我们也可能会使用CDN引入静态文件,这时候就可以这么写:
//cdn.staticfile.org/jquery/3.2.1/jquery.min.js
但是,有时候可能需要写明协议,例如,如果页面头部用到了rel=”canonical”,也要改成HTTPS网址。
https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js
<form>
<from>
标签的action
属性值必须是https
的,我们可以使用2种方式:
<form action="/houseAsk" method="post"></form> #相对路径写法
<form action="https://域名/houseAsk" method="post"></form> #绝对路径写法
经过观察,在众多的客户端部署中,只有
<form>
会导致浏览器认为网站不安全,这种不安全提示有多重:1、360地址栏的锁会有黄色警告三角号,而不是一个纯绿色的锁
2、谷歌浏览器的地址栏会显示【不安全】红色字样