Debian 12用snap包安装Let's Encrypt Certbot免费SSL证书为Apache网站启用Https
•
2024-02-20
•
文章类别:
操作系统 & 服务器
•
阅读量:99
Let's Encrypt 是一个证书颁发机构(CA),它使你能够获取和安装免费TLS/SSL证书,从而为 web 服务器启用加密HTTPS。它提供软件客户端 Certbot 来获取和安装免费TLS/SSL证书,该客户端能够自动完成获取和安装免费TLS/SSL证书大多数(如果不是全部的话)所需的步骤。目前,在Apache和Nginx上,获取和安装 SSL 证书的整个过程都是完全自动化的。
在本文中将介绍如何在Debian 12 上使用 snap 安装 Let's Encrypt Certbot 获取免费 TLS / SSL 证书,为使用 Apache 服务器的网站启用 Https 协议。
如果你实用其他操作系统请查看:安装Let's Encrypt Certbot免费SSL证书为网站启用https
安装 Certbot
使用 Snap 软件包安装 Let's Encrypt Certbot,不需要单独安装 Apache 插件,安装完 Let's Encrypt Certbot 就已经安装了 Apache 插件。
1、更新 Debian 12 软件源
$ sudo apt update
2、安装 snapd
$ sudo apt install snapd
键入 Y
和 Enter
完成 snapd 的安装
3、使用 snap
命令安装 core
snap软件包,它是安装普通 snap 包的依赖:
$ sudo snap install core
4、刷新 core
snap软件包,目的为确保 snapd 及其依赖为最新版本:
$ sudo snap refresh core
5、使用 snap
命令安装 Certbot
sudo snap install --classic certbot
snap命令参数解释:
--strict
:禁止 snap 应用访问系统资源与网络--classic
:允许 snap 应用访问系统资源与网络
注意:安装 certbot 时需要使用--classic
参数,因为certbot需要访问系统资源及网络
6、添加 Certbot 到 PATH
添加 Certbot 到 PATH 能够方便的在终端中使用该命令:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
启用Apache模块
Debian 12 系统上为 Apache 服务网站启用 Https,需要先启用 Apache 的一些模块。Apache 的模块配置启用模块的文件文件夹为 /etc/apache2/mods-enabled
,Apache在其配置文件 /etc/apache2/apache2.conf
内导入了该文件内的所有模块。
Debian 系统下的 Apache 提供了启用模块的命令a2enmod
和禁用模块的命令a2dismod
,操作简单方便。
启用 Apache SSL / TLS 模块
默认情况下 Apache SSL / TLS 模块没有启用,使用 a2enmod
命令启用 Apache SSL / TLS 模块:
$ sudo a2enmod ssl
启用 Apache Rewrite 模块
默认情况下 Apache Rewrite 模块没有启用,使用 a2enmod
命令启用 Apache Rewrite 模块:
$ sudo a2enmod rewrite
配置Apache虚拟机
为网站下载 Let's Encrypt Certbot Https (SSL)证书需要访问 Apache 的虚拟机信息,因此需先配置好 Apache 的虚拟机。
以下 Apache 虚拟机配置以域名 example.com 为例,在你的项目中,需要修改成你自己的域名。
简单HTML站点的虚拟机配置
创建一个简单的 HTML 项目,以 HTTPS 协议访问站点时显示该 HTML 文件内容,该 HTML 文件只是用来测试使用 Let's Encrypt Certbot 获取的免费 SSL 证书是否配置正确,能够为网站启用 HTTPS。
1、创建项目目录
sudo mkdir /var/www/example
2、创建HTML文件
sudo vi /var/www/example/index.html
添加代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>启用 HTTPS</title>
</head>
<body>
<p>成功启用Https</p>
</body>
</html>
3、创建本站点80端口虚拟机
sudo vi /etc/apache2/sites-available/example.conf
添加如下代码,启用 301 跳转:
<VirtualHost *:80>
ServerName example.com
Redirect permanent "/" "https://www.example.com/"
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent "/" "https://www.example.com/"
</VirtualHost>
4、创建本站点443端口虚拟机
Let's Encrypt Certbot 添加虚拟机SSL证书时使用的 443 端口对应虚拟机的名称是 "80端口虚拟机的名称 + le-ssl
",本例中80端口对应虚拟机的名称是example,因此443端口对应的虚拟机的文件名称为example-le-ssl.conf
:
sudo vi /etc/apache2/sites-available/example-le-ssl.conf
添加如下代码:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.html [L]
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
Redirect permanent "/" "https://www.example.com/"
</VirtualHost>
5、启用Apache站点虚拟机
Debian 12 系统下的 Apache 提供了启用站点虚拟机的命令 a2ensite
和禁用虚拟机的命令 a2dissite
,操作简单方便。
使用a2ensite
命令启用example
和example-le-ssl
站点:
$sudo a2ensite example
$sudo a2ensite example-le-ssl
PHP语言虚拟机配置
其他的配置与简单HTML站点的配置相同,只有 www.exmaple.com
对应443端口的虚拟机不同,在此我们只给出该虚拟机的配置:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]
</Directory>
</VirtualHost>
配置解释:把非文件及非目录的访问,重定向到 index.php
,由 PHP 相应并生成 HTML。
Python语言虚拟机配置
其他的配置与简单HTML站点的配置相同,只有 www.exmaple.com
对应443端口的虚拟机不同,在此我们只给出该虚拟机的配置。
虚拟机配置以 Django 或 Wagtail CMS 的虚拟机配置为例:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/example
Alias /favicon.ico /var/www/example/static/favicon.ico
Alias /robots.txt /var/www/example/static/robots.txt
Alias /static/ /var/www/example/static/
Alias /media/ /var/www/example/media/
<Directory /var/www/example/static>
Require all granted
</Directory>
<Directory /var/www/example/media>
Require all granted
</Directory>
WSGIDaemonProcess wsgi_example_ssl python-home=/var/www/venv/example python-path=/var/www/example
WSGIProcessGroup wsgi_example_ssl
WSGIScriptAlias / /var/www/example/example/wsgi.py process-group=wsgi_example_ssl
<Directory /var/www/example/example>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
启用SSL模块后自动启用Apache 443端口
Debian 12 系统下端口的配置文件为/etc/apache2/ports.conf,根据文件配置,当启用了SSL模块后,就自动启用了 443 端口,无需额外的配置。
为网站获取 Let’s Encrypt 证书
为网站获取 Let’s Encrypt Certbot 的 Https 证书的方式有两种:
- 获取证书并自动配置 Apache 的虚拟机,为站点添加使用证书信息
- 只获取证书不配置 Aapche 虚拟机
获取证书并配置 Apache
1、只为 www.example.com
获取证书
sudo certbot --apache -d www.example.com
2、为 example.com
和 www.example.com
站点获取证书
sudo certbot --apache -d example.com -d www.example.com
输出信息如下:
Output
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example/privkey.pem
This certificate expires on 2024-3-11.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for example.com to /etc/apache2/sites-available/example-le-ssl.conf
Successfully deployed certificate for www.example.com to /etc/apache2/sites-available/example-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://example.com and https://www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
只获取证书
sudo certbot certonly --apache -d www.example.com
自动更新SSL证书
1、如果要测试 Certbot 获取免费 SSL 证书的过程,可以运行如下 certbot 命令:
$ sudo certbot renew --dry-run
2、Debian 12 系统下安装Let's Encrypt Certbot后,Let's Encrypt Certbot SSL 证书 90 天后就会过期,创建 cron 脚本每 12 小时更新一次 Certbot SSL 证书,运行如下代码:
sudo echo "0 0,12 * * * root /usr/bin/python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
结语
在本文中,讲述了如何在 Debian 12 系统下使用 Snap 软件包安装 Let’s Encrypt 的客户端 certbot,为站点获取免费 SSL 证书,并为 Apache 站点配置使用该证书,最后介绍了如何创建 cron 脚本,自动更新 Let's Encrypt 免费 SSL 证书。在 Debian 12 中安装 Certbot后,很多步骤就已经自动完成。
0 评论