Apache2获取免费https证书并定时更新

一、获取Let’s Encrypt证书

准备工作

1.使用ssl连接工具连接服务器(比如Xshell、bitvise等);

2.在网站根目录下创建一个人二级文件夹(需要验证域名是绑定这个服务器):
.well-known/acme-challenge
比如网站根目录是/var/www/html,则需要这样操作:
mkdir -p /var/www/html/.well-known/acme-challenge

3.创建一个保存证书的文件夹并跳转到该文件夹:
mkdir /etc/apache2/cert
cd /etc/apache2/cert

获取证书

1.创建一个 账号:
openssl genrsa 4096 > account.key

2.创建 RSA 私钥:
openssl genrsa 4096 > domain.key
3.生成 CSR 文件

openssl req -new -sha256 -key domain.key -subj “/” -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf “[SAN]\nsubjectAltName=DNS:ownsite.com”)) > domain.csr

标记部分改为你们自己的域名,如有多个域名以逗号分隔(可能有域名个数上限,自行考证):
例(DNS:ownsite.com,DNS:www.ownsite.com,DNS:www.ownsite.vip

4.下载执行脚本
wget https://raw.githubusercontent.com/diafygi/acme-tiny/master/acme_tiny.py

5.执行脚本
python3 acme_tiny.py --account-key ./account.key --csr ./domain.csr --acme-dir /var/www/html/.well-known/acme-challenge > ./signed.crt

5.下载 Let’s Encrypt 的中间证书
wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem

6.合成证书
cat signed.crt intermediate.pem > chained.pem

至此https证书下载完毕

二、配置证书

前置条件

1.开启ssl模块,执行:
2enmod ssl 和 a2ensite default-ssl

2.打开/etc/apache2/ports.conf文件,配置端口号为Listen 80 443
(一般已有80端口)

证书路径配置

1.打开 /etc/apache2/sites-available/default-ssl.conf 文件
(一般叫这个名字,在/etc/apache2/sites-available夹下一般只有2个文件,名字带ssl的就是htpps证书配置文件)

2.输入以下内容,存在则修改(文件中#是注释符号)

ServerName www.ownsite.com:443 #域名
ServerAlias ownsite.com #域名
DocumentRoot /var/www/html #网站根目录

SSLEngine on # 开启证书验证
SSLCertificateFile /etc/apache2/cert/chained.pem
SSLCertificateKeyFile /etc/apache2/cert/domain.key
SSLCertificateChainFile /etc/apache2/cert/chained.pem

ServerName和ServerAlias 标黄处写自己的域名,下面3个证书路径也根据你自己保存的路径写

开启重写模块(看个人需要)

1.打开 /etc/apache2/apache.conf 文件

2.任意地方添加一行:
LoadModule rewrite_module modules/mod_rewrite.so

3.把文件中的AllowOverride None改为AllowOverride All

4.打开 /var/ww/html/.htaccess 文件(设置不带www的域名跳转到带www的域名)

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{HTTP_HOST} ^ownsite.com [NC]
#将www.ownsite.com替换为目标域名
RewriteRule ^(.*)$ https://www.ownsite.com/$1 [L,R=301]
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
<IfModule>

黄色部分输入你们自己的域名

配置https强制跳转(看个人需要)

1.打开 /etc/apache2/sites-available/000-default.conf 文件
添加一下内容:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]

重启服务器

service apache2 restart
重启完成访问网站查看证书是否已更新

三、配置定时更新证书脚本

1.创建一个脚本文件:
touch /etc/apache2/cert/renew_cert.sh

2.打开改文件,输入内容:

#!/bin/bash
python3 /etc/apache2/cert/acme_tiny.py --account-key /etc/apache2/cert/account.key --csr /etc/apache2/cert/domain.csr --acme-dir /var/www/html/.well-known/acme-challenge/ > /etc/apache2/cert/signed.crt || exit
cd /etc/apache2/cert/ && wget -O - https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem > intermediate.pem
cat /etc/apache2/cert/signed.crt intermediate.pem > /etc/apache2/cert/chained.pem
service apache2 reload

3.保存并退出

4.执行一下脚本查看是否正确

5.配置定时更新任务:
(1)输入 crontal -e 进入编辑定时文件页面
(2)输入以下内容:
# 每月1号0点定时更新https证书
0 0 1 * * /etc/apache2/cert/renew_cert.sh >> /var/log/acme_tiny.log
(3)保存退出

四、一些遇到过的问题

没报错,但是网站就是访问不了

1.可能是某个步骤漏了:比如开启ssl模块

2.可能是防火墙没有开启443端口访问权限:

(1)ufw status :查看防火墙状态
(2)ufw allow 443 :开放443端口

3.可能没有重启服务器

4./etc/apache2/ports.conf可能没有加入443端口

5.证书路径没有配置或配置错误(配置错误重启服务器会保存)

定时任务执行报错

1.windows直接传可能会报错
(1)可能没有执行权限
(2)不同系统导致的编码格式问题:执行: sed -i -e ‘s/\r$//’ renew_cert.sh

python执行报错

1.建议用python3执行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值