文章目录
- 前言
- Let’s Encrypt 和 OpenSSL的区别
- 文章相关
- 正文
- 1、安装snapd
- 2. 使用snapd安装certbot
- 3. 生成证书(需要指定nginx)
- 5. Nginx.conf的配置
- 问题
- 1、error: system does not fully support snapd
- 原因
- 解决方式
- 2、The error was: PluginError(‘Nginx build is missing SSL module (–with-http_ssl_module).’)
- 原因
- 解决方式
- 3、Could not read file: /usr/local/nginx/conf/nginx.conf due to invalid character. Only UTF-8 encoding is supported.
- 原因
- 解决方式
前言
Let’s Encrypt 和 OpenSSL的区别
区别 | Let’s Encrypt | OpenSSL |
---|---|---|
定义 | Let’s Encrypt是一个由互联网安全研究小组(ISRG)提供的免费、自动化和开放的证书颁发机构(CA) | OpenSSL是一个强大的开源程序套件,主要用于提供加密功能,包括SSL/TLS协议的实现 |
功能 | 旨在通过自动化流程消除手动创建和安装SSL/TLS证书的复杂流程,推广万维网服务器的加密连接,并为安全网站提供免费的SSL/TLS证书 | 提供加密库(libcrypto)和SSL/TLS库(libssl),支持多种加密算法和协议,可用于创建、管理SSL/TLS证书和私钥等 |
角色与职责 | 作为证书颁发机构(CA),其主要职责是颁发和管理SSL/TLS证书,确保这些证书被浏览器和操作系统信任 | 作为一个加密程序套件,其主要职责是提供加密功能和协议支持,包括用于创建和管理SSL/TLS证书的工具 |
证书颁发与管理 | 通过自动化流程为用户颁发免费的SSL/TLS证书,并管理这些证书的生命周期,包括颁发、更新和吊销等 | 虽然可以用于创建自签名证书(即自己颁发的证书),但这些证书通常不被浏览器和操作系统信任,因为缺乏第三方CA的签名。OpenSSL也支持与其他CA(包括Let’s Encrypt)的集成,用于证书的管理和部署 |
费用 | 提供完全免费的SSL/TLS证书服务,降低了网站加密的成本门槛 | 本身是开源免费的,但如果你需要第三方CA签名的证书,则需要支付相应的费用(尽管Let’s Encrypt等CA提供了免费选项) |
信任度 | 颁发的证书由ISRG的根证书签名,这些根证书已被主流浏览器和操作系统预置信任,因此其颁发的证书具有较高的信任度 | 自签名证书通常不被浏览器和操作系统信任,因为它们没有经过第三方CA的验证。然而,OpenSSL创建的证书可以提交给第三方CA进行签名,从而获得信任 |
使用场景 | 非常适合需要SSL/TLS证书但预算有限的网站和个人开发者 | 更适合需要深入控制加密过程、创建自定义加密解决方案或与其他加密系统集成的高级用户和开发者 |
特点 | 自动化、免费、广泛支持 | 开源、多功能、广泛应用于各种加密需求 |
总结:
- Let’s Encrypt 和 OpenSSL 都可以生成证书
- Let’s Encrypt 属于机构颁发的证书;OpenSSL就是用源码生成的证书
- Let’s Encrypt 能得到浏览器信任;OpenSSL属于自签名证书(即自己颁发的证书),通常不被浏览器和操作系统信任
- Let’s Encrypt 有有效期,需要定期更新证书;OpenSSL可以自己设置过期时间,理论上可以设置永久
文章相关
测试环境:使用OpenSSL生成证书并配置Https
正文
1、安装snapd
centos(这里我使用的是这个系统)
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
ubuntu
sudo apt update
sudo apt install snapd
测试一下:
$ sudo snap install hello-world
hello-world 6.4 from Canonical✓ installed
$ hello-world
Hello World!
可能会出现的问题:error: system does not fully support snapd
解决方式见下文
2. 使用snapd安装certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
3. 生成证书(需要指定nginx)
安装Nginx
certbot certonly --nginx --nginx-ctl /usr/local/nginx/sbin/nginx --nginx-server-root /usr/local/nginx/conf
这里的certonly就是只下载对应文件,不进行配置nginx,适用于自己配置或者更新使用。去掉则会帮你进行配置nginx(我没有试用)。
可能会出现以下问题:
1、The error was: PluginError(‘Nginx build is missing SSL module (–with-http_ssl_module).’)
2、Could not read file: /usr/local/nginx/conf/nginx.conf due to invalid character. Only UTF-8 encoding is supported.
3、
执行上面的命令后,程序会让你确认你的邮箱和你的域名,确认完成后会将证书文件生成在指定目录中。
certbot certonly --nginx --nginx-ctl /usr/local/nginx/sbin/nginx --nginx-server-root /usr/local/nginx/conf
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): [这里输入你的邮箱]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y [选Y 继续]
Account registered.
Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: whrss.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): [这里不需要输入,回车选所有]
Requesting a certificate for whrss.com
Successfully received certificate.
Certificate is saved at:
# [这里告诉我们生成的文件路径和有效期]
/etc/letsencrypt/live/whrss.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/whrss.com/privkey.pem
This certificate expires on 2023-03-02.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
5. Nginx.conf的配置
server{
#监听443端口
listen 443 ssl;
#对应的域名,空格分隔域名就可以了
server_name whrss.com;
#第一个域名的文件
ssl_certificate /etc/letsencrypt/live/whrss.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/whrss.com/privkey.pem;
# 其他配置
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#这是我的主页访问地址,因为使用的是静态的html网页,所以直接使用location就可以完成了。
location / {
root /;
index /;
proxy_pass http://127.0.0.1:9091;
proxy_set_header Host $host:443;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
}
问题
1、error: system does not fully support snapd
原因
Linux 内核(Linux 3.10.0-327.22.2.el7.x86_64)太老了,需要升级内核
解决方式
第一步:先执行 yum update 更新所有的包
第二步:先查看并记录当前的内核版本
# uname -sr
Linux 3.10.0-327.22.2.el7.x86_64
第三步:将内核升级到最新版本
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
第四步:仓库启用后,你可以使用下面的命令列出可用的内核相关包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
第五步:接下来,安装最新的主线稳定内核
yum --enablerepo=elrepo-kernel install kernel-ml
第六步:重启机器
reboot
第七步:修改 GRUB 配置
为了让新安装的内核成为默认启动选项,你需要如下修改 GRUB 配置:打开并编辑 /etc/default/grub 并设置 GRUB_DEFAULT=0。意思是 GRUB 初始化页面的第一个内核将作为默认内核。
vim /etc/default/grub
第八步:接下来运行下面的命令来重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
第九步:重启机器
reboot
第十步:查看内核版本是否升级成功
# uname -r
5.15.10-1.el7.elrepo.x86_64
2、The error was: PluginError(‘Nginx build is missing SSL module (–with-http_ssl_module).’)
原因
目前nginx缺少–with-http_ssl_module这个模块,我们要添加这个模块
解决方式
重新编译nginx
进入nginx下载的目录
cd /usr/local/nginx-1.18.0
执行命令
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/usr/local/nginx/logs/error.log --pid-path=/usr/local/nginx/logs/nginx.pid --http-log-path=/usr/local/nginx/logs/access.log --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module
#prefix= 指向安装目录(编译安装)
#conf-path= 指向配置文件(nginx.conf)
#error-log-path= 指向错误日志目录
#pid-path= 指向pid文件(nginx.pid)
#http-log-path= 设定access log路径
#with-http_gzip_static_module 启用ngx_http_gzip_static_module支持(在线实时压缩输出数据流)
#with-http_stub_status_module 启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态)
#with-http_ssl_module 启用ngx_http_ssl_module支持(使支持https请求,需已安装openssl)
执行命令
make
make install
查看是否生效
/usr/local/nginx/sbin/nginx -V
3、Could not read file: /usr/local/nginx/conf/nginx.conf due to invalid character. Only UTF-8 encoding is supported.
原因
这个错误信息表明你尝试读取的 /usr/local/nginx/conf/nginx.conf 文件包含了非UTF-8编码的字符,而你的编辑器或处理该文件的程序仅支持UTF-8编码
解决方式
1、检查文件编码:
file /usr/local/nginx/conf/nginx.conf
2、转换文件编码
iconv -f ISO-8859-1 -t UTF-8 /usr/local/nginx/conf/nginx.conf -o /usr/local/nginx/conf/nginx.conf.utf8
然后,你可能需要将转换后的文件重命名为原文件名(确保先备份原文件)
mv /usr/local/nginx/conf/nginx.conf.utf8 /usr/local/nginx/conf/nginx.conf
3、验证
file /usr/local/nginx/conf/nginx.conf