SSL证书(SSL Certificates)可以说是现在一个网站的标配,如果没有用SSL证书,浏览器上会显示不安全,导致一部分用户以为网站有问题。另外在微信小程序和iOS APP上,提供的API必须要用HTTS协议,否则不允许上架,所以掌握好SSL证书的配置是一个后端开发必备的技能。
在阿里云上,提供了每年可以申请一次的免费SSL证书,对于一些个人站点或者小公司的网站来说,确实是一个不错的选择。
可能有的人会问勇哥,收费版的SSL证书和免费版的证书有什么区别?首先说下他们的相同点。
首先我们要知道,任何一个人,都可以给自己甚至别人签发SSL证书。但是这个世界上只有那么几家公司(比如Digicert(原Symantec,已更名)、GeoTrust以及TrustAsia,甚至还有一些国产公司)被权威机构所认可,他们的CA根证书被集成到操作系统中了,只有CA根证书被集成到操作系统中,这个CA根证书下的子证书才能被浏览器认为是安全的。
这里说个真实的小故事,大家应该用过12306网站买票,在之前打开12306.cn网站的时候,浏览器会显示此网站不安全,在地址栏中显示一个红叉,甚至在Chrome中整个页面显示一个警告性质的红色,让人以为打开了一个钓鱼网站。其实原因很简单,就是当初12306用的根证书是他自己给自己颁发的,不是权威机构所认可的,操作系统中不存在这个根证书,导致曾经一段时间,用户体验相当差。
当然,现在的12306已经改成了DiGiCert CN签发的证书了,用户体验上好了很多,那个恶心的叉叉也不见了!
再回到正题,收费版的SSL证书和免费版的证书有什么区别,主要体现在以下几点。
DigiCert
这样的公司,是全世界最被认可的公司,他们签发的证书,可激活互联网最受信任的诺顿安全签章,价格肯定会有所差别了。当然还有更多其他方面的不同,比如付费的CA证书加密算法方面会做得更加优秀等。但是如果只是一个个人站点,或者是小公司的网站,我们可以先用免费的CA证书来过渡。毕竟买一个付费的CA证书,最贵的一年也要1W多,少的也要1000多。
好了,现在进入正题,下面勇哥给大家好好唠唠在阿里云上如何白嫖SSL证书。
进入到阿里云官网后,点击产品->SSL证书,来到如下界面:
然后点击选购SSL证书,来到购买证书页面。
分别点击DV单域名证书,选择证书数量为20,这个20代表可以给20个不同的域名签发证书。然后右下角会显示价格为0元,点击立即购买即可。
购买完证书后,还需要在控制台->SSL证书中创建证书,来到控制台的SSL证书页面,如下图所示。
然后执行如下操作:点击左侧菜单栏SSL证书 -> 免费证书 -> 创建证书 -> 申请证书
。
然后输入要给哪个域名颁发证书,如下图。
接着点击下一步,再点击一个DNS验证,然后就进入审核阶段。因为是免费证书,整个签发过程都是由系统自动完成,因此在证书列表页面重新刷新一下页面,估计就能看到已签发的提示了。
SSL证书申请下来后,还要配置到服务器上才能使用。不同的web服务器使用方法都有不同,详细的文档可以查看这个链接:https://help.aliyun.com/document_detail/109827.html#section-ri1-ayr-evy
里面总结了现在市面上几乎所有web服务器安装SSL证书的教程。
这里我们以Nginx为例,来说一下安装过程。
首先把证书下载到本地,证书有两个文件,一个是xx.key
,一个是xx.pem
。
再把这两个文件上传到服务器上,放到一个nginx有权限读取到的路径中。比如我就放到当前用户home目录下的cert文件夹中。
接着在Nginx的配置文件中,填入类似以下代码:
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
ssl_session_timeout 5m;
#表示使用的加密套件的类型。
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录。
index index.html index.htm;
}
}
如果想要所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点下添加以下rewrite语句。示例配置如下:
server {
listen 80;
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
}
然后,就能愉快的在浏览器中使用:https://[domain]
来访问我们的网站了,在地址栏左侧也有一把小锁,看起来确实高大上了很多。比如看下我们知了传课的官网(www.zlkt.net
)。
有空也可以来我们网站(www.zlkt.net
)逛逛,帮忙找下bug。