FreeBSD 13用系统包安装Let's Encrypt Certbot免费SSL证书为Apache启用 Https
•
2024-02-20
•
文章类别:
操作系统 & 服务器
•
阅读量:335
Let's Encrypt 是一个证书颁发机构(CA),它使你能够获取和安装免费TLS/SSL证书,从而为 web 服务器启用加密HTTPS。它提供软件客户端 Certbot 来获取和安装免费TLS/SSL证书,该客户端能够自动完成获取和安装免费TLS/SSL证书大多数(如果不是全部的话)所需的步骤。目前,在Apache和Nginx上,获取和安装 SSL 证书的整个过程都是完全自动化的。
本文介绍在 FreeBSD 13 系统上使用 FreeBSD 13 的系统安装包安装 配置 Let's Encrypt Certbot,为使用 Apache 服务器的网站开启 Https 加密服务。
如果你实用其他操作系统请查看:安装Let's Encrypt Certbot免费SSL证书为网站启用https
安装 Certbot 及 Aapche 插件
使用 FreeBSD 系统包安装 Let's Encrypt Certbot 安装的软件的版本不是最新的。
1、查找软件包 certbot 软件对应的 FreeBSD 系统包信息:
sudo pkg search certbot
显示信息:
py39-certbot-2.6.0,1 Let's Encrypt client
py39-certbot-apache-2.6.0 Apache plugin for Certbot
2、使用 FreeBSD 系统包安装 certbot 及 Apache 的插件:
sudo pkg install py39-certbot py39-certbot-apache
启用 Apache 模块
FreeBSD 13 系统上为 Apache 服务网站启用 Https,需要先启用 Apache 的一些模块和配置 Apache 虚拟机。Apache 的模块配置在配置文件 /usr/local/etc/apache24/httpd.conf
内。
启用 Apache SSL / TLS 模块
Apache SSL / TLS 功能所对应的模块为 mod_ssl.so
查找 mod_ssl.so 所在行号:
grep -n 'mod_ssl.so' /usr/local/etc/apache24/httpd.conf
注: -n 参数是获取行号
显示:
149:#LoadModule ssl_module libexec/apache24/mod_ssl.so
编辑httpd.conf并定位到 mod_ssl.so 所在行,启用模块
sudo vi +149 /usr/local/etc/apache24/httpd.conf
键入 x 删除改行的注释, 启用SSL模块;键入:wq 然后键入 ENTER , 保存并推出文件
启用 Apache Rewrite 模块
Apache Rewrite 功能所对应的模块为 mod_rewrite.so
查找 mod_rewrite.so 所在行号:
grep -n 'mod_rewrite.so' /usr/local/etc/apache24/httpd.conf
注: -n 参数是获取行号
显示:
182:#LoadModule ssl_module libexec/apache24/mod_rewrite.so
编辑httpd.conf并定位到 mod_rewrite.so 所在行,启用模块
sudo vi +182 /usr/local/etc/apache24/httpd.conf
键入 x 删除改行的注释, 启用SSL模块;键入:wq 然后键入 ENTER , 保存并推出文件
配置Apache虚拟机
为网站下载 Let's Encrypt Certbot Https (SSL)证书需要访问 Apache的虚拟机信息,因此需先配置好 Apache 的虚拟机。
以下 Apache 虚拟机配置以域名 example.com 为例,在你的项目中,需要修改成你自己的域名。
创建存放虚拟机的目录
1、为了方便管理虚拟机,我们创建两个存放虚拟机的目录用来管理虚拟机:
sudo mkdir /usr/local/etc/apache24/sites-available.d
sudo mkdir /usr/local/etc/apache24/sites-enabled.d
解释说明:
sites-available.d
:用来存放可用的虚拟机文件。sites-enabled.d
:用来存放启用的虚拟机文件,它是到可用虚拟机的符号链接。
2、编辑/usr/local/etc/apache24/extra/httpd-vhosts.conf
文件,导入/usr/local/etc/apache24/sites-enabled.d
文件夹内的配置文件,启用该文件夹内的虚拟机:
sudo vi /usr/local/etc/apache24/extra/httpd-vhosts.conf
在文件的末尾添加:
Include etc/apache24/sites-enabled.d/*.conf
简单HTML站点的虚拟机配置
创建一个简单的 HTML 项目,以 HTTPS 协议访问站点时显示该 HTML 文件内容,该 HTML 文件只是用来测试使用 Let's Encrypt Certbot 获取的免费 SSL 证书是否配置正确,能够为网站启用 HTTPS。
1、创建项目目录
sudo mkdir /usr/local/www/example
2、创建HTML文件
sudo vi /usr/local/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 /usr/local/etc/apache24/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 /usr/local/etc/apache24/sites-available.d/example-le-ssl.conf
添加如下代码:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /usr/local/www/example
<Directory /usr/local/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站点虚拟机
创建从/usr/local/etc/apache24/sites-available.d
文件夹内的文件到/usr/local/etc/apache24/sites-enabled.d
文件夹的符号链接启用example
和example-le-ssl
站点:
sudo ln -s /usr/local/etc/apache24/sites-available.d/example.conf /usr/local/etc/apache24/sites-enabled.d/
sudo ln -s /usr/local/etc/apache24/sites-available.d/example-le-ssl.conf /usr/local/etc/apache24/sites-enabled.d/
PHP语言虚拟机配置
其他的配置与简单HTML站点的配置相同,只有www.exmaple.com
对应443端口的虚拟机不同,在此我们只给出该虚拟机的配置:
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /usr/local/www/example
<Directory /usr/local/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 /usr/local/www/example
Alias /favicon.ico /usr/local/www/example/static/favicon.ico
Alias /robots.txt /usr/local/www/example/static/robots.txt
Alias /static/ /usr/local/www/example/static/
Alias /media/ /usr/local/www/example/media/
<Directory /usr/local/www/example/static>
Require all granted
</Directory>
<Directory /usr/local/www/example/media>
Require all granted
</Directory>
WSGIDaemonProcess wsgi_example_ssl python-home=/usr/local/www/venv/example python-path=/usr/local/www/example
WSGIProcessGroup wsgi_example_ssl
WSGIScriptAlias / /usr/local/www/example/example/wsgi.py process-group=wsgi_example_ssl
<Directory /usr/local/www/example/example>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
启用 Apache 虚拟机配置
Apache 虚拟机对应的文件为 httpd-vhosts.conf
查找 httpd-vhosts.conf 所在行号:
grep -n 'httpd-vhosts.conf' /usr/local/etc/apache24/httpd.conf
注: -n 参数是获取行号
显示:
510:#Include etc/apache24/extra/httpd-vhosts.conf
编辑 httpd.conf 并定位到 httpd-vhosts.conf 所在行,启用虚拟机
sudo vi +510 /usr/local/etc/apache24/httpd.conf
键入 x 删除改行的注释, 启用SSL模块;键入:wq 然后键入 ENTER , 保存并推出文件
启用 Apache 443 端口
Apache 配置文件中端口对应的配置为 Listen
查找 Listen 所在行号:
grep -n 'Listen' /usr/local/etc/apache24/httpd.conf
注: -n 参数是获取行号
显示:
44:# Listen: Allows you to bind Apache to specific IP addresses and/or
48:# Change this to Listen on specific IP addresses as shown below to
51:#Listen 12.34.56.78:80
52:Listen 80
编辑 httpd.conf 并定位到 Listen 显示信息的最后一行,新起一行添加端口
sudo vi +52 /usr/local/etc/apache24/httpd.conf
光标转到行尾,键入 a 编辑文件,键入 ENTER 新起一行,输入 Listen 443
,输入 ESC,键入:wq 然后键入 ENTER , 保存并推出文件
为网站获取 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
只获取证书
sudo certbot certonly --apache -d www.example.com
配置 certbot 证书自动更新
使用 certbot 命令查看获取证书的过程
sudo certbot renew --dry-run
使用 cron 自动获取证书
运行 crontab 命令编辑 cron 的脚本
sudo crontab -e
添加如下代码:
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
# Order of crontab fields
# minute hour mday month wday command
0 0,12 * * * /usr/local/bin/certbot renew
结语
在本文中,讲述了如何在 FreeBSD 13 系统下使用系统包安装 Let’s Encrypt 的客户端 certbot,并为站点下载 SSL 证书,并为 Apache 站点配置使用该证书,最后配置了 Certbot 证书自动更新。
0 评论