越来越多的网站开始支持https协议访问了,各种浏览器随着版本的更新也非常”不厚道”的在http访问时的地址栏显示”不安全”字样.SSL证书大多数都收费,但有个非盈利性组织叫Let’s Encrypt提供免费的证书申请,并有很好的客户端工具能不关站的情况下进行证书续期,证书默认三个月有效期.
这是Let’s Encrypt官网:https://letsencrypt.org
官网推荐使用certbot客户端获取证书及配置https,cerbot客户端的官网是:https://certbot.eff.org
在cerbot官网选择对应服务器软件及系统版本即可自动跳转到指引教程,非常易用:
我们选择站点运行在CentOS8系统的Apache上.页面便会提示安装命令.
先用终端ssh到服务器,然后输入下面的命令行,下载certbot客户端,复制到bin目录,并赋予执行权限.
- wget https://dl.eff.org/certbot-auto
- sudo mv certbot-auto /usr/local/bin/certbot-auto
- sudo chown root /usr/local/bin/certbot-auto
- sudo chmod 0755 /usr/local/bin/certbot-auto
接下来输入下面的命令,根据提示输入邮箱,域名等信息即可完成证书获取及站点ssl相关配置.
- sudo /usr/local/bin/certbot-auto –apache
配置成功后,可以用如下命令将证书更新加入crontab的定时任务,每天的0点及12点自动续期证书:
- echo “0 0,12 * * * root python3 -c ‘import random; import time; time.sleep(random.random() * 3600)’ && /usr/local/bin/certbot-auto renew -q” | sudo tee -a /etc/crontab > /dev/null
整个过程非常便捷,但如果服务器下有多个站点或者多个域名,有时候上面这种向导配置的方式就不太好用了,可以参考下面这些步骤手动的获取证书与设置虚拟目录,包含http重定向给https.
如果是上面向导模式失败或者想完全重新配置Let’s Encrypt,可以先删除之前的残留文件:
- rm -rf /etc/letsencrypt/
注意,上面是删除letsencrypt目录,请谨慎操作或者备份该目录再操作.确认mod_ssl及openssl已安装,如果不小心配置错了ssl配置文件,也可以重装mod_ssl或openssl,使用下面命令重装:
- yum reinstall mod_ssl openssl
接下来我们获取对应域名的证书,以本站为例,为1vr.cn及4rmb.net获取一个证书,输入下列命令:
- sudo /usr/local/bin/certbot-auto certonly -d 1vr.cn,www.1vr.cn,4rmb.net,www.4rmb.net
根据提示输入,等有如下字样返回,说明证书获取成功,并可以看到证书存放路径:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/1vr.cn/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/1vr.cn/privkey.pem
… …
然后进入到apache httpd服务配置所在目录,即 /etc/httpd/ 目录.确认/etc/httpd/conf.d/ssl.conf文件存在,如它不存在可尝试重装mod_ssl,或者去修改httpd.conf文件,增加433端口监听:
- vim /etc/httpd/conf/httpd.conf
在该配置文件中增加如下三行代码,代表如果mod_ssl模块启用时,对443端口进行监听:
<IfModule mod_ssl.c>
Listen 443
</IfModule>
保存并关闭它,切换到虚拟目录的配置文件,虚拟目录文件我建立在:/etc/httpd/conf.d/virtual.conf 文件中:
- vim /etc/httpd/conf.d/virtual.conf
参照上图,在原有虚拟目录配置段落中增加重定向,以实现用户使用http访问时,自动重定向至https,代码翻译为启用重定向引擎,如果访问的端口不是443,无论网址是什么,都不改变原有网址,仅将http换为https访问:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
同样将VirtualHost段落复制粘贴,修改粘贴中的80端口为443端口,即用该段落作为https虚拟目录的设定配置.该段落的首尾加上mod_ssl是否激活的判断,确保仅在mod_ssl模块激活时执行该段配置:
<IfModule mod_ssl.c>
VirtualHost代码段落块
</IfModule>
在443为端口的虚拟主机设置代码段落块中加入下面4行代码,表示开启SSL引擎,以及之前我们获取的证书存放路径的指定,证书路径与申请域名有关联,请根据你自己的域名及相应证书路径做修改:
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/1vr.cn/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/1vr.cn/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/1vr.cn/fullchain.pem
重新加载httpd配置文件使我们的配置生效:
- systemctl reload httpd.service
如果系统开启了防火墙,也需要将443端口开放,使用如下命令:
- firewall-cmd –zone=public –add-port=443/tcp –permanent
- firewall-cmd –reload
好了,我们的证书配置完毕,自动续期证书方法没有特别设置,与向导步骤一样,使用 sudo /usr/local/bin/certbot-auto renew 命令加入到crontab自动续期即可.访问站点试试吧, https://4rmb.net
有问题欢迎留言,我会尽快回复,协助解决.