Debian 12用python包安装Let's Encrypt Certbot免费SSL证书为Apache网站启用Https
•
2024-02-20
•
文章类别:
操作系统 & 服务器
•
阅读量:343
Let's Encrypt 是一个证书颁发机构(CA),它使你能够获取和安装免费TLS/SSL证书,从而为 web 服务器启用加密HTTPS。它提供软件客户端 Certbot 来获取和安装免费TLS/SSL证书,该客户端能够自动完成获取和安装免费TLS/SSL证书大多数(如果不是全部的话)所需的步骤。目前,在Apache和Nginx上,获取和安装 SSL 证书的整个过程都是完全自动化的。
在本文中将介绍如何在Debian 12 上使用 Python 包安装 Let's Encrypt Certbot 获取免费 TLS / SSL 证书,为使用 Apache 服务器的网站启用 Https 协议,并设置证书自动更新。
如果你实用其他操作系统请查看:安装Let's Encrypt Certbot免费SSL证书为网站启用https
安装 Certbot 及 Aapche 插件
使用 Python 的软件包安装 Let's Encrypt Certbot,可以安装最新版的 Let's Encrypt Certbot,同时可以使用新版的 Python。
安装系统依赖包
编译安装 Let's Encrypt Certbot 所需的系统依赖包,在 Debian 12 系统上已经安装了 Python 3.11,但是没有安装 venv 软件包。
sudo apt install python3-venv libaugeas0
创建 Python 激活虚拟环境
把 Let's Encrypt Certbot 的 pip 软件包安装在 Python 的虚拟环境下,以方便管理、升级 Certbot 及解决运行中出现的问题。
sudo mkdir -p /var/www/certbot
sudo chown usergroup:username /var/www/certbot
sudo chmod -R go=u /var/www/certbot
sudo python3 -m venv /var/www/certbot
sudo /var/www/certbot/bin/pip install --upgrade pip
注意:usergroup
:username
需要更换你的系统中使用的用户组与用户名。
安装 Certbot 的 Python 软件包
需要使用 sudo 运行命令,这样才能方便访问 Certbot
sudo /var/www/certbot/bin/pip install certbot certbot-apache
如果下载 Python 软件包速度很慢,使用如下命令快速下载 Python 软件包:
sudo /var/www/certbot/bin/pip install -i https://mirrors.tencent.com/pypi/simple certbot certbot-apache
加入 Certbot 到 PATH
加入 Certbot 到 PATH 中,可以在终端中方便的使用 certbot
sudo ln -s /var/www/certbot/bin/certbot /usr/bin/certbot
测试Certbot是否安装正确
sudo certbot
升级Certbot
sudo /var/www/certbot/bin/pip install --upgrade certbot certbot-apache
删除Certbot
在使用 Let's Encrypt Certbot 的过程中,如果出现了问题而无法解决,可以删除了 Certbot 再重新安装。
使用 Python 软件包安装 Certbot,删除非常简单,只需删除 certbot 符号链接及 Python 虚拟环境:
sudo rm /usr/bin/certbot
sudo rm -rf /var/www/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 系统下安装Let's Encrypt Certbot后,Let's Encrypt Certbot SSL 证书 90 天后就会过期,创建 cron 脚本每 12 小时更新一次 Certbot SSL 证书,运行如下代码:
sudo echo "0 0,12 * * * root /var/www/certbot/bin/python -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
结语
在本文中,讲述了如何在 Debian 12 系统下使用 Python 软件包安装 Let’s Encrypt 的客户端 certbot,为站点获取免费 SSL 证书,并为 Apache 站点配置使用该证书,最后配置了使 Certbot 自动更新免费 SSL 证书。在 Debian 12 中安装 Certbot后,很多步骤就已经自动完成。
0 评论