那个深夜,小马正在做不可言喻的事情,正当兴起,突然电话响了,吓得小马一激灵。
小马此时已经感受到了一阵BUG出现后的不安,像一股气堵着胸口,小心翼翼地按开了接听键。
“喂,小马。我刚收到邮件,那个说网站证书要过期了,你赶紧去看一下啊”。
what?就这?小马心上悬着的石头顿时落下,三条黑线已然挂上了柳梢头。
一、什么是网站SSL证书
我们来看百科怎么说,其实简单的概念百科这里已经安排得明明白白了。小马之所以拷贝一份过来,是因为小马知道如果不是研究技术的老板,一般连百度一下百科都懒得(没时间)去搞呢,所以整理这点小事还是小马一起效劳了。
SSL主要提供认证用户和服务器,确保数据发送到正确的客户机和服务器;加密数据以防止数据中途被窃取; 维护数据的完整性,确保数据在传输过程中不被改变。
大道理小马也不想呱噪那么多,简单通俗地理解为,本来你的网站可能支持HTTP协议的,但为了满足某些要求(比如微信小程序接口)或者未来自身网站数据传输的安装,都会选择HTTPS协议通信,因为与http不同的是其传输过程数据不是明文的而是加密的。那这里SSL证书就充当了类似于一个加密认证的过程。我们借助一张图来直接直观理解一下https过程。
对称加密效率高。
一图理解加解密认证过程:
图糟理不糟
我们注意到其实证书是充当了一个密钥校验的过程。而这个服务器证书上的ca机构的根证书(专门发布证书的机构)必须要在本地电脑是存在的(一般浏览器自带,也可以自己添加--这就是怎么自己生产证书了,也就是为什么自己生产的证书要发给用户并装到用户的浏览器里才可以),否则会报警(通常谷歌浏览器URL前面会显示一个红色的不受信任的警告标识)。
好了,讲了一堆大道理,还是直接上手吧。
二、如何安装SSL证书
如何安装ssl证书来让自己的网站支持https访问呢?
1、获取证书
这个证书当然是需要去签发机构申请了,然而大部分是收费,当然也有免费的。我们如果没什么特殊的要求直接申请免费的就行。小马有注册过阿里云,上面是可以直接申请免费证书的(有效期一年)。申请完绑定一下域名,按照提示操作验证一下域名和机器是属于你的即可。
按照自身的服务器环境(nginx/apache等等)下载申请到的证书,解压后一般会得到三个文件,大致如下:
文件说明:
证书文件214040678080938.pem,包含两段内容,请不要删除任何一段内容。
如果是证书系统创建的CSR,还包含:证书私钥文件214040678080938.key、证书公钥文件public.pem、证书链文件chain.pem。
2、配置web服务器配置文件
(1)上传证书到指定目录。以apache为例(阿里云上其实也有详细的配置教程,也可以直接参考),将解压下来的文件上传到web配置文件夹下的证书的目录下,没有证书目录就先创建一个。命令参考如下:
将证书文件上传的指定的cert目录
( 2 ) 打开 apache 安装目录下 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”:有些已经去掉的就这一步先跳过不管。
LoadModule ssl_module modules/mod_ssl.so (如果找不到请确认是否编译过 openssl 插件)
Include conf/extra/httpd-ssl.conf
( 3 ) 打开 apache 安装目录下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:
添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
修改加密套件如下
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4
证书公钥配置
SSLCertificateFile cert/public.pem
证书私钥配置
SSLCertificateKeyFile cert/214040678080938.key
证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/chain.pem
参考如图:
( 4 )最后配置的网站目录支持443端口:
如果第一次配置还需要看下PHP是否开启了支持openssl拓展。phpinfo()查看,如果没有安装,则参考这里安装拓展。
( 5 ) 重启 Apache。(其实重启httpd服务即可,service httpd restart)
好了,就这样配置完成了,更换证书步骤就更简单了,只要上传新证书更新文件配置即可了。打开你的网站发起https请求吧。
于是小马兴致勃勃回拨通了老板的电话,嘟嘟嘟嘟....您拨打的电话暂时无人接听.....
(本故事纯属虚构,如有雷同我信了你滴斜!)
三、后记
1、如果访问https出现黄色图标,可能是因为页面中含有http请求,需要对网页资源(代码)进行调整。HTTPS的页面最好不要含HTTP请求,像如果是TX的活动页面就会报错。
2、网站http请求都自动转https请求,设置跳转策略。apache里配置参考如下:
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
3、nginx配置443并支持SSL证书参考:
开心一刻: