AlmaLinux 9用系统包安装Let's Encrypt Certbot免费SSL证书为Apache网站启用Https
•
2024-06-30
•
文章类别:
操作系统 & 服务器
•
阅读量:278
Let's Encrypt 是一个证书颁发机构(CA),它使你能够获取和安装免费TLS/SSL证书,从而为 web 服务器启用加密HTTPS。它提供软件客户端 Certbot 来获取和安装免费TLS/SSL证书,该客户端能够自动完成获取和安装免费TLS/SSL证书大多数(如果不是全部的话)所需的步骤。目前,在Apache和Nginx上,获取和安装 SSL 证书的整个过程都是完全自动化的。
在本文中将介绍如何在 AlmaLinux 9 上使用系统包安装 Let's Encrypt Certbot 获取免费 TLS / SSL 证书,为使用 Apache 服务器的网站启用 Https 协议,并设置证书自动更新。
如果你实用其他操作系统请查看:安装Let's Encrypt Certbot免费SSL证书为网站启用https
安装Certbot及Aapche插件
使用 AlmaLinux 9 系统包安装 Let's Encrypt Certbot 安装的软件的版本不是最新的。
安装EPEL仓库
1、Certbot 及其 Apache 插件的软件包在 epel 仓库内,需要先安装 epel:
sudo dnf install epel-release
2、更新系统:
sudo dnf upgrade
安装系统依赖包
配置 Apache 启用 htttps 需要使用的 SSL 软件包:
sudo dnf install mod_ssl
安装Certbot
1、查找软件包 certbot 软件对应的 AlmaLinux 9 系统包信息:
sudo dnf search certbot
显示信息很多,其中包括如下信息:
certbot.noarch : A free, automated certificate authority client
python3-certbot.noarch : Python 3 libraries used by certbot
python3-certbot-apache.noarch : The apache plugin for certbot
2、使用 AlmaLinux 9 系统包安装 certbot 及 Apache 的插件:
sudo dnf install certbot python3-certbot python3-certbot-apache
测试Certbot是否安装正确
sudo certbot
启用Apache模块
AlmaLinux 9 系统上为 Apache 服务网站启用 Https,需要先启用 Apache 的一些模块和配置 Apache 虚拟机。AlmaLinux 9 系统中已经安装的Apache 模块存放在文件夹/etc/httpd/modules
,Apache 配置启用模块的文件文件夹为 /etc/httpd/conf.modules.d
。
启用 Apache SSL / TLS 模块
AlmaLinux 9 默认情况下是没有安装SSL模块的,我们已经在安装系统依赖包时安装了SSL模块。安装SSL模块后会自动创建/etc/httpd/conf.modules.d/00-ssl.conf
,用来加载并启动SSL模块。
如果提示未启用SSL模块,请重启 Apache 服务器:
sudo sytemctl restart httpd
Apache Rewrite模块默认已启用
默认情况下 AlmaLnux 9 中安装 Httpd 后,默认已经启用了 Rewrite 模块。
配置Apache虚拟机
为网站下载 Let's Encrypt Certbot Https (SSL)证书需要访问 Apache的虚拟机信息,因此需先配置好 Apache 的虚拟机。
以下 Apache 虚拟机配置以域名 example.com 为例,在你的项目中,需要修改成你自己的域名。
创建存放虚拟机的目录
1、为了方便管理虚拟机,我们创建两个存放虚拟机的目录用来管理虚拟机:
sudo mkdir /etc/httpd/conf.sites-available.d
sudo mkdir /etc/httpd/conf.sites-enabled.d
解释说明:
conf.sites-available.d
:用来存放可用的虚拟机文件。conf.sites-enabled.d
:用来存放启用的虚拟机文件,它是到可用虚拟机的符号链接。
2、编辑/etc/httpd/conf/httpd.conf
文件,导入/etc/httpd/conf.sites-enabled.d
文件夹内的配置文件,启用该文件夹内的虚拟机:
sudo vi /etc/httpd/conf/httpd.conf
在文件的末尾添加:
IncludeOptional conf.sites-enabled.d/*.conf
简单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/httpd/conf.sites-available.d/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/httpd/conf.sites-available.d/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站点虚拟机
创建从/etc/httpd/conf.sites-available.d/
文件夹内的文件到/etc/httpd/conf.sites-enabled.d/
文件夹内的符号链接启用example
和example-le-ssl
站点:
sudo ln -s /etc/httpd/conf.sites-available.d/example.conf /etc/httpd/conf.sites-enabled.d/
sudo ln -s /etc/httpd/conf.sites-available.d/example-le-ssl.conf /etc/httpd/conf.sites-enabled.d/
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端口
AlmaLinux 9 系统下启用 443 端口的配置文件为/etc/httpd/conf.d/ssl.conf
,该文件是在安装mod_ssl
软件后自动创建的。
为网站获取 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/httpd/conf.sites-available.d/example-le-ssl.conf
Successfully deployed certificate for www.example.com to /etc/httpd/conf.sites-available.d/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、AlmaLinux 9 系统下安装Let's Encrypt Certbot后,Let's Encrypt Certbot SSL 证书 90 天后就会过期,创建 cron 脚本每 12 小时更新一次 Certbot SSL 证书,运行如下代码:
sudo echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && sudo certbot renew -q" | sudo tee -a /etc/crontab > /dev/null
结语
在本文中,讲述了如何在 AlmaLinux 9 系统下使用系统软件包安装 Let’s Encrypt 的客户端 certbot,为站点获取免费 SSL 证书,并为 Apache 站点配置使用该证书,最后配置了使 Certbot 自动更新免费 SSL 证书。在 AlmaLinux 9 中安装 Certbot后,很多步骤就已经自动完成。
0 评论