借助acme.sh免费开启网站的HTTPS(Apache2环境)

后知后觉。

Posted by YSY on July 9, 2020

本文仅记录无套路搞定网站HTTPS的方法。网上搜索的资料实在太杂乱了,就连acme.sh官方文档也不够详尽。

主要就三步:生成证书、安装证书、配置SSL。下文以Ubuntu 16.04(版本不重要) + Apache2为例。默认已经安装crontabopenssl等基本工具。网站目录也是默认的 /var/www/html/

生成证书

1、先做准备工作:

# 进入服务器的用户(一般是root)目录然后创建文件夹
cd ~
mkdir -p ~/.acme.sh/
cd ~/.acme.sh/
# 配置一下别名,等下方便用
alias acme.sh=~/.acme.sh/acme.sh

2、安装acme.sh,它可以帮你搞定免费证书:

# 此时已经在~/.acme.sh/目录下,开始安装
curl https://get.acme.sh | sh
# 安装过程可能会提示socat没装,那你就装一下,装完再重新执行一次上面的安装命令
apt-get install socat

3、生成证书,以 test.com 域名作为下文示例(当然你需要改成你自己的):

acme.sh --issue -d test.com --apache

到此证书生成完毕。可以看到命令执行后会提示Success。

安装证书

1、进入apache安装目录创建存放证书的文件夹:

# Ubuntu通过仓库安装的Apache默认就在这,如果你不在这,那么请自行进入相应目录
cd /etc/apache2
# 创建一个目录等会安装证书,其实路径都无所谓,自定义的
mkdir ssl

2、开始安装证书,这是一个带参数的一次执行命令:

# 这里的3个文件名也是自定义的,自己能区分即可,但后缀最好保持.pem
acme.sh --install-cert -d test.com \
--cert-file      /etc/apache2/ssl/test.com-cert.pem  \
--key-file       /etc/apache2/ssl/test.com-key.pem  \
--fullchain-file /etc/apache2/ssl/test.com-fullchain.pem \
--reloadcmd      "service apache2 force-reload"

配置SSL

1、检查并开启SSL模块:

a2enmod ssl
# 然后最好重启一下Apache服务
service apache2 restart

2、修改SSL配置文件(关键步骤):

cd /etc/apache2/sites-available
# 这里为了方便直接用vim编辑了,你自己有别的方式修改也可以
vim default-ssl.conf

打开default-ssl.conf文件后,重点关注这几个配置:

# 这个要是开启状态on,默认就是on的
SSLEngine on
# 各证书文件路径,配置为你刚才安装时自己设置的路径,一共5个,注意注释掉原有配置
SSLCertificateFile       /etc/apache2/ssl/test.com-cert.pem
SSLCertificateKeyFile    /etc/apache2/ssl/test.com-key.pem

SSLCertificateChainFile  /etc/apache2/ssl/test.com-fullchain.pem

SSLCACertificatePath     /etc/apache2/ssl/
SSLCACertificateFile     /etc/apache2/ssl/test.com-fullchain.pem

记得:wq保存退出。最后刷新配置:

a2ensite default-ssl.conf
# 会提示你重载Apache服务
service apache2 reload

再用浏览器打开https://test.com,完美。当然,你需要保证你的服务器是开启了443端口的,默认情况下一般都没问题。用 netstat -lp 命令测试一下,看到Local Address里有https就可以了。

开小灶

一般来说,我们需要将HTTP访问强制重定向到HTTPS,咋搞?

1、检查开启相关模块:

a2enmod rewrite
a2enmod ssl # 这个刚才启用过了就无需再执行了

2、修改文件HTTP配置:

vim /etc/apache2/sites-available/000-default.conf

3、在80端口节点下增加如下三行(注意是增加不是直接复制粘贴啊!):

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

4、保存后重启Apache即可:

service apache2 restart

参考

文档里讲解了大部分使用说明,但一些细节没提到,会导致部署失败。