HTTPS 如今已经相当普及,但是仍然有不少的同学,没有学过如何部署 HTTPS,刚好明哥前段时间折腾网站 ,刚好可以把这个过程详细的记录下来,教大家如何将你的 HTTP 网站上点亮 HTTPS 。
要想使用 HTTPS ,要做的事情还是有点多的:
我有一个域名 iswbm.com
,其下有好多的子域名,比如写 Python 的在线博客 python.iswbm.com
,还有写 Golang 的在线博客 golang.iswbm.com
,还有我的图床 image.iswbm.com
等等。
这里新建了个子域名 demo.iswbm.com
,并设置其解析到 我的服务器上,如下图(服务器 ip 已码掉)。
为了方便,我这里就使用 Apache 放了一个 HTTP 的静态网页,方法很简单,大家百度即可。
SSL 数字证书怎么来的呢?
你可以自己制作,也可以向CA权威机构申请。
二者的区别是:
下面,我将分别向你展示这两种方法,都是如何操作的。
在阿里云和腾讯云都可以 进行 SSL 证书的申请,证书的申请有付费的(价格也不便宜),也有免费的,看了一圈,只有腾讯云有免费的 SSL 证书的申请渠道(阿里云听说以前也有,后来关闭了)。
本篇文章,仅以演示教学之用,所以只用腾讯云的免费证书的就足够啦。
登陆腾讯云,可以看到SSL 证书有分很多种,企业型的,企业型专业版的,增强型,增强型专业版的,还有域名型免费版。
点击选择 域名型免费版
点击 免费快速申请
后,填写域名和你的个人邮箱
再点击下一步,会需要你验证域名所有权,验证方式有如下三种
但由于我的域名不是腾讯云平台解析的,因此没有 自动DNS验证的选项,只有其他两种
点击 确认申请
后,会提示你进入域名验证所有权的流程,这里我选择 手动DNS验证。
审核通过后,3s 内就会给你颁发证书,你可以从控制台点击证书下载。
下载下来的会是一个 zip 包。
解压一下,会有不同的服务器类型(有 Apache、IIS、Nginx、Tomcat)的文件夹。
我使用的是 Apache ,在这个文件夹下面有三个文件:
1_root_bundle.crt
:根证书2_demo.iswbm.com.crt
:域名证书3_demo.iswbm.com.key
:私钥文件这三个文件,下一步会部署于我的服务器上。
接下来讲第二种 SSL 证书申请方式。
没有权威的第三方 CA 机构给自己颁发证书,那就自己给自己颁发咯。
自签名 SSL 的证书制作过程,可以分为两步:
步骤很多,命令很多,命令所带的参数更多,对于只想学习证书签发流程的你,把这些命令都背下来,并不是一个好的选择,毕竟这种事可能也干不了几次。
因此,我把这些步骤、命令,都整合成一个 shell 脚本,你只要执行这个脚本就行了。
$ bash create_self-signed-cert.sh --ssl-domain=demo.iswbm.com --ssl-trusted-domain=demo.iswbm.com --ssl-size=2048 --ssl-date=3650
对应的参数的解释,在脚本中都有解释
这个脚本过长,不好直接贴上来,我将它放在我的公众号(Python编程时光)后台,你可以直接回复『证书签名』直接获取下载。
执行完成后,会在当前目录下生成好多个文件。
其中,只有两个文件对我们有用
根据服务器的类型不同,部署安装的方式有有所区别,腾讯云的操作文档已经非常详细了,你可以通过这个链接访问到如下的文档:https://cloud.tencent.com/document/product/400/4143
这里我将以 CentOS 7.2 + Apache 为例,演示如何部署 SSL 证书。
先安装一下 mod_ssl
$ yum install -y mod_ssl
安装完后,在 /etc/httpd/conf.d/ 目录下 会有个 ssl.conf 文件。
编辑修改这个文件,以下是我的配置供你参考
<VirtualHost 0.0.0.0:443>
DocumentRoot "/var/www/html"
#填写证书名称
ServerName demo.iswbm.com
#启用 SSL 功能
SSLEngine on
#证书文件的路径
SSLCertificateFile /etc/pki/tls/certs/demo.iswbm.com.crt
#私钥文件的路径
SSLCertificateKeyFile /etc/pki/tls/private/demo.iswbm.com.key
#根证书文件的路径
SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
</VirtualHost>
如果你的证书是从权威 CA 机构上申请来的。
比如我上面从腾讯云上申请来的,那么这三个文件就是从已经从腾讯云的控制台上下载下来的那三个文件。
在修改完后,务必记得把下载的这三个文件,放到相应的目录中去。
配置完 ssl.conf,可能还需要你 check 一下 /etc/httpd/conf/httpd.conf
的一些配置,这些配置一般用默认的就可以,但是以防万一,还是写一下吧
Include conf.modules.d/*.conf
写这一行的目的,就是为了 httpd 去加载 mod_ssl 这个模块
$ cat /etc/httpd/conf.modules.d/00-ssl.conf
LoadModule ssl_module modules/mod_ssl.so
一切配置完成后,记得重启一下 httpd 服务
$ systemctl restart httpd
然后使用 chrome 访问一下 https//demo.iswbm.com
看看,大功告成。
而如果你的证书是自签名的。
ssl.conf 配置文件下的应该改成这样
<VirtualHost 0.0.0.0:443>
DocumentRoot "/var/www/html"
#填写证书名称
ServerName demo.iswbm.com
#启用 SSL 功能
SSLEngine on
#证书文件的路径
SSLCertificateFile /etc/pki/tls/certs/tls.crt
#私钥文件的路径
SSLCertificateKeyFile /etc/pki/tls/private/tls.key
</VirtualHost>
同时记得把这两个文件也拷贝到相应的目录下
$ cp tls.crt /etc/pki/tls/certs/
$ cp tls.key /etc/pki/tls/private/
最后还是不要忘了重启 httpd
$ systemctl restart httpd
试着用 chrome 访问一下,可以看到 chrome 提示该连接不安全
如果执意要访问,可以点击左下方的 继续前往
,这样以后再访问的时候,就不会再出现这个警告页面了。
不安全
三个字,让人很没有安全感,那有没有办法去掉呢?
答案是,没有,只要是自签名的证书,在 chrome ,firefox 等主流浏览器看来都是不安全的。
即使你把这个根证书添加到你的受信任的证书列表中,也是徒然。
下面就试着来安装一下这个根证书。
按照下图指示,拖动证书到本地磁盘上。
打开 Mac 上的 钥匙串访问
点击 登陆
,然后再拖动这个证书到窗口中进行安装
右键该证书,点击 显示简介
,跳出下面的界面后,再点击 信任
,把 IP 安全选择选为 始终信任
。
设置完后,再访问下 demo.iswbm.com
,仍然显示连接不安全,并且证书是无效的
点击证书,显示证书,该证书确实已经放入信任列表中了。
到这里文章就结束了,你应该已经了解点亮 HTTPS 整个流程是怎么样的。
------end------