CentOS8下的Apache使用Let’s Encrypt配置HTTPS教程(免费)

越来越多的网站开始支持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

有问题欢迎留言,我会尽快回复,协助解决.