acme.sh生成https证书

news2024/11/15 20:00:18

前言

SSL 价格并不便宜, 本节介绍如何使用 acme.sh 生成免费的 SSL 证书

证书生成原理

CA && Let’s Encrypt

证书颁发机构(CA,Certificate Authority)是一个负责颁发数字证书的实体。数字证书用于在互联网上验证实体的身份,确保通信的安全和可信性。

Let’s Encrypt 是一个免费、自动化和开放的证书颁发机构 ,由互联网安全研究组(ISRG)运营。它的目标是通过提供免费的 SSL/TLS 证书,让 HTTPS 加密在互联网上变得更加普及和易于部署。以下是一些关于 Let’s Encrypt 的关键点:

  • 免费:Let’s Encrypt 提供免费的 SSL/TLS 证书,不需要支付传统证书的费用。
  • 自动化:通过 ACME 协议(Automatic Certificate Management Environment),可以自动申请、验证、安装和更新证书。
  • 安全:帮助网站实现 HTTPS,加密用户与网站之间的通信,提高安全性。
  • 开放:任何人都可以使用 Let’s Encrypt 的服务,无需特殊权限或繁琐的申请流程。
  • 社区支持:由许多大公司和组织支持,如 Mozilla、思科、Akamai 和 EFF(电子前沿基金会)。

ACME 协议

ACME(Automatic Certificate Management Environment)协议是一种自动化方式,用于与证书颁发机构(CA,如 Let’s Encrypt)进行交互,自动颁发、续订和管理证书。ACME 协议通过域名验证来证明你对域名的控制权。

域名验证

为了颁发证书,CA 需要验证你对请求证书的域名的控制权。ACME 支持多种验证方法,常见的有 HTTP-01、DNS-01 和 TLS-ALPN-01。

  • HTTP-01: CA 会请求一个特定的 URL(例如 http://yourdomain.com/.well-known/acme-challenge/unique-token),你需要在服务器上提供一个包含特定内容的文件来响应这个请求。
  • DNS-01: CA 会验证特定的 DNS TXT 记录(例如 _acme-challenge.yourdomain.com),你需要在 DNS 服务器上添加这一记录来进行验证。

证书签发

通过验证后,CA 会生成并签发 SSL 证书,并将证书发送回给请求者。这个证书包含了域名的公钥信息,CA 对其进行签名,确保其真实性。

为 idea.chenxiaoyao.cn 添加证书

下面用真实项目解释流程, 项目基本信息如下:

idea.chenxiaoyao.cn # 项目域名, docker 部署, 3000 端口
assets.chenxiaoyao.cn # cdn 域名, 用于主项目地资源存储

服务器为 aws 免费使用版(一年), 操作系统为 Ubuntu

域名在腾讯云上申请并使用, OSS 服务使用了阿里云

服务器 acme.sh 安装

登录云服务器控制台, 可以通过控制台网页或者本地命令行登录

我这里使用了是本地命令行

ssh -i "xxxx.pem" ubuntu@xxxx.us-west-1.compute.amazonaws.com

安装 acme.sh, github 地址: https://github.com/acmesh-official/acme.sh

curl https://get.acme.sh | sh -s email=my@example.com

安装完成根目录会出现.acme.sh 文件夹,里面有一个文件,用于配置证书
https://github.com/chenxiaoyao6228/cloudimg/2024/acme-install.png

获取密钥

腾讯云获取密钥: https://console.cloud.tencent.com/cam/capi, 点击新建, 复制到安全的地方

登录云服务器控制台

vi  .bashrc

添加下面两行

export Tencent_SecretId="<Your SecretId>"
export Tencent_SecretKey="<Your SecretKey>"

Esc, :wq保存退出, 使用下面的命令重载

source .bashrc

生成证书

~/.acme.sh/acme.sh --issue --dns dns_tencent -d idea.chenxiaoyao.cn

对应的执行效果大概是这样
https://github.com/chenxiaoyao6228/cloudimg/2024/acme-execute-cert-gen.png

生成的证书会放在对应的文件夹下

https://github.com/chenxiaoyao6228/cloudimg/2024/acme-cert.png

也可以通过

nslookup -q=txt _acme-challenge.idea.chenxiaoyao.cn

结果类似下图
https://github.com/chenxiaoyao6228/cloudimg/2024/acme-cert-text-record.png

域名添加 A 记录

通过公网 ip+端口访问项目, 确保可以访问

在腾讯云添加 A 记录值

https://github.com/chenxiaoyao6228/cloudimg/2024/acme-domain-a-record.png

添加完之后尝试使用域名+端口访问项目, 比如

http://idea.chenxiaoyao.cn:3000

nginx 部署证书

安装 nginx

sudo apt update
sudo apt install nginx

nginx -t获取 nginx 配置地址

/etc/nginx/nginx.conf

使用vi /etc/nginx/nginx.conf编辑配置, 如何没有权限的话加上sudo

http{}中添加以下配置, server1 是保证可以通过 http 访问, server2 是保证可以通过 https 访问

http {

# 省略其他配置

server {
    listen 80;
    server_name idea.chenxiaoyao.cn;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name idea.chenxiaoyao.cn;

    ssl_certificate /etc/ssl/idea.chenxiaoyao.cn/fullchain.cer;
    ssl_certificate_key /etc/ssl/idea.chenxiaoyao.cn/idea.chenxiaoyao.cn.key;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

}

配置完成后重启 nginx

nginx -t # 看配置是否生效
sudo systemctl restart nginx # 重启nginx

至此, 你就可以访问 https://idea.chenxiaoyao.cn

为 assets.chenxiaoyao.cn 添加证书

关闭 nginx

acme.sh 会启动一个 服务,用于验证域名的控制权, 因此要避免端口占用

https://github.com/chenxiaoyao6228/cloudimg/2024/acme-nginx.png

sudo systemctl stop nginx

生成证书

注意我们域名解析用的还是腾讯云

acme.sh --issue --dns dns_tencent -d assets.chenxiaoyao.cn

证书生成之后可以到对应的文件夹查看

阿里云添加证书

地址在: https://cdn.console.aliyun.com/safety/https

但是 web 端已经不支持自签了, 只能通过 cli

https://github.com/chenxiaoyao6228/cloudimg/2024/aliyun-https-cdn.png

获取 aliyun access key

登录 https://ram.console.aliyun.com/manage/ak

生成 access key 保存到安全的地方

我这里用的是 acess key, 安全起见你可以尝试子用户AcessKey的方式

下载 aliyun cli

具体可以参考: https://github.com/aliyun/aliyun-cli?tab=readme-ov-file

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/aliyun/aliyun-cli/HEAD/install.sh)"

安装完成之后可以使用 aliyun 命令测试下

aliyun configure

https://github.com/chenxiaoyao6228/cloudimg/2024/aliyun-cli-config.png

上传证书

服务器新建upload_cert_to_aliyun.sh

#!/usr/bin/env bash

# 替换为您的证书文件路径
CERT_FULLCHAIN_PATH="$HOME/.acme.sh/assets.chenxiaoyao.cn_ecc/fullchain.cer"
CERT_KEY_PATH="$HOME/.acme.sh/assets.chenxiaoyao.cn_ecc/assets.chenxiaoyao.cn.key"
DOMAIN="assets.chenxiaoyao.cn"

# 获取证书内容的自定义函数
get_cert() {
    # 使用 sed 删除掉证书文件的空行
    sed -e "/^$/d" "$CERT_FULLCHAIN_PATH"
}

# 获取密钥内容的自定义函数
get_key() {
    cat "$CERT_KEY_PATH"
}

# 证书名称 (替换域名的 . 为 _,以符合阿里云证书名称规范)
CERT_NAME="${DOMAIN//./_}-$(date +%s)"

# 需要更新证书的 CDN 域名列表
DOMAIN_LIST=(
    "assets.chenxiaoyao.cn"
)

# 设置 CDN 域名列表使用新的证书
for _domain in "${DOMAIN_LIST[@]}"; do
    aliyun cdn SetCdnDomainSSLCertificate --DomainName "$_domain" --SSLPub="$(get_cert)" --SSLPri="$(get_key)" --CertType upload --SSLProtocol on || exit 103
done

echo "证书已成功上传并配置到 CDN 域名。"

执行

chmod +x upload_cert_to_aliyun.sh
./upload_cert_to_aliyun.sh

上传完成, 到控制台去看, 发现已经有了

https://github.com/chenxiaoyao6228/cloudimg/2024/aliyun-https-cdn-success.png

上传图片测试, 可以看到 https 已经启用了

https://github.com/chenxiaoyao6228/cloudimg/2024/aliyun-https-cdn-success-cat-test.png

nginx 服务恢复

证书生成之后记得恢复 nginx 服务, 不然idea.chenxiaoyao.cn等其他服务挂了

sudo systemctl restart nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1970736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

注册或购买的谷歌账号的辅助邮箱是否需要设置?有什么用?设置的要点是什么?

今天早上&#xff0c;有个朋友联系到GG账号服务&#xff0c;问我谷歌账号辅助邮箱怎么用。说实在的这个问题有点抽象&#xff0c;哈哈。 然后我详细了解了一下&#xff0c;原来是这样的&#xff1a; 他的谷歌账号提示异常&#xff08;这个时候账号肯定是被停用了的&#xff09…

【Linux应用编程】Day12线程

线程 与进程类似&#xff0c;线程是允许应用程序并发执行多个任务的一种机制&#xff0c;线程参与系统调度&#xff1b; 事实上&#xff0c;系统调度的最小单元是线程、而并非进程。 ⚫ 线程的基本概念&#xff0c;线程 VS 进程&#xff1b; ⚫ 线程标识&#xff1b; ⚫ 线…

电脑上有什么好用的记笔记软件吗?试试这3款笔记软件,功能丰富又实用

笔记软件千千万&#xff0c;日常使用方便最关键&#xff01;&#xff01; 推荐3个各有亮点的笔记软件&#xff0c;不止是记笔记这么简单&#xff1a; 1、FlowUs 推荐指数&#xff1a;☆☆☆☆☆ 关键词&#xff1a;文档笔记软件 下载链接>>flowus.cn FlowUs是一款在…

ADI - 通过5 V至24 V输入提供双极性、双向DC-DC流入和流出电流

大部分电子系统都依赖于正电压轨或负电压轨&#xff0c;但是有些应用要求单电压轨同时为正负电压轨。在这种情况下&#xff0c;正电源或负电源由同一端子提供&#xff0c;也就是说&#xff0c;电源的输出电压可以在整个电压范围内调节&#xff0c;并且可以平稳转换极性。例如&a…

【mars3d】实现线面内插值计算效果

面插值计算效果展示&#xff1a; &#xff08;离屏渲染方式&#xff09;面插值效果展示&#xff1a; 面内插值计算插点效果展示&#xff1a; 线插值效果展示&#xff1a; &#xff08;离屏渲染方式&#xff09;高密度线内插值计算效果展示&#xff1a; 相关代码&#xff1a; i…

docker二进制包部署(带arm版自动部署包)

文章目录 1.概述2.Docker二进制包下载3.安装脚本制作4.安装5.卸载6.注意事项7.分享一个arm版自动部署安装包8.懒人 X86 版安装包 1.概述 最近需要在Linux上部署docker&#xff0c;于是自己做了一个自动部署包。脚本的写法不区分X86或arm&#xff0c;通用的。 2.Docker二进制包…

网络安全和数据安全到底有什么区别?(非常详细)零基础入门到精通,收藏这一篇就够了

随着信息技术的迅猛发展&#xff0c;网络安全和数据安全已经成为当今社会不可忽视的重要议题。两者在保障信息系统安全、防范数据泄露和保障用户权益方面起着至关重要的作用。然而&#xff0c;尽管网络安全与数据安全在某些方面有着密切的联系&#xff0c;但它们在定义、目标和…

“八股文”:程序员的福音还是梦魇?

——一场关于面试题的“代码战争” 在程序员的世界里&#xff0c;“八股文”这个词儿可谓是“如雷贯耳”。不&#xff0c;咱们可不是说古代科举考试中的那种八股文&#xff0c;而是指程序员面试中的那些固定套路的题目。如今&#xff0c;各大中小企业在招聘程序员时&#xff0…

11.2.0.4 ADG故障 LGWR (ospid: 30945):terminating the instance due to error 4021

11.2.0.4 ADG无法连接&#xff0c;查看数据库为关闭状态&#xff0c;重新启动实例&#xff0c;应用日志后即可正常同步数据并打开到只读模式。 查看alert日志发现有以下报错&#xff1a; 0RA-04021:timeout occurred while waiting to lock obiectLGWR (ospid: 30945):termi…

矩阵、向量、张量 一文彻底理清!

矩阵&#xff1a;可理解为二维数组、二维张量 向量Vector&#xff1a;是只有一列的矩阵 张量&#xff1a;是矩阵向任意维度的推广。 机器学习经常会用到张量做变换&#xff0c;所以下文重点介绍张量。 可以通过.ndim查看numpy数据的张量维度。张量的维度&#xff08;dimens…

【熊猫派对】

游戏简介 熊猫派对是一款滑稽打闹游戏&#xff0c;玩法容易上手简单&#xff0c;游戏中玩家将操控自己的熊猫人&#xff0c;与其他对手对战&#xff0c;重拳、飞脚甚至还有各种各样的武器都可用来击败你的对手。 游戏特色 1、滑稽角色 网络超火的滑稽角色&#xff0c;从表情包…

JNI原理是什么?JNI在DDS binding JAVA中/DDS移植android平台中有什么作用?

1 JNI是什么2 如何在JAVA中调用C/C方法&#xff08;通过JNI调用的demo&#xff09;java中声明一个本地native方法生成JNI头文件Java native方法转换成C的规则与语法说明C实现的native方法本地实现以及.o .dll库的生成查看hello.dll库中的函数运行一下HelloJNI JNI在DDS移植andr…

微信小程序 - 自定义计数器

微信小程序通过自定义组件&#xff0c;实现计数器值的增加、减少、清零、最大最小值限定、禁用等操作。通过按钮事件触发方式&#xff0c;更新计数器的值&#xff0c;并修改相关联的其它变量。通过提升用户体验&#xff0c;对计数器进行优化设计&#xff0c;使用户操作更加便捷…

PHP教育培训小程序系统源码

&#x1f680;【学习新纪元】解锁教育培训小程序的无限可能✨ &#x1f4da; 引言&#xff1a;教育培训新风尚&#xff0c;小程序来引领&#xff01; Hey小伙伴们&#xff0c;是不是还在为找不到合适的学习资源而烦恼&#xff1f;或是厌倦了传统教育模式的单调&#xff1f;今…

Monaco 使用 SignatureHelpProvider

Monaco 中 SignatureHelpProvider 是方法提示说明&#xff0c;当敲入方法名时&#xff0c;系统会提示方法名称和对应的参数信息。效果如下&#xff1a; 通过 registerSignatureHelpProvider 实现 SignatureHelpProvider 处理函数。 实现 signatureHelpTriggerCharacters 和 pro…

我们如何优化 Elasticsearch Serverless 中的刷新成本

作者&#xff1a;来自 Elastic Francisco Fernndez Castao, Henning Andersen 最近&#xff0c;我们推出了 Elastic Cloud Serverless 产品&#xff0c;旨在提供在云中运行搜索工作负载的无缝体验。为了推出该产品&#xff0c;我们重新设计了 Elasticsearch&#xff0c;将存储与…

深入了解下 Markdown 的原理

前面讲了 Markdown 的基本语法&#xff0c;常见的 Markdown 编辑器&#xff0c;在继续讲解其他知识之前&#xff0c;有必要稍微深入了解一下 Markdown 与 HTML 的关系。 ‍ ‍ HTML 简介 什么是 HTML&#xff1f;其实它也是标记语言的一种&#xff0c;但是比 Markdown 更重…

Java面试题--JVM大厂篇之深入分析Parallel GC:从原理到优化

目录 引言: 正文&#xff1a; 1. Parallel GC原理解析 2. Parallel GC关键参数配置 3. 常见调优场景与技巧 4. 监控与日志分析 结束语&#xff1a; 引言: 在Java应用程序中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;扮演着至关重要的角色。对…

【学术会议征稿】第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024)

第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024) 2024 3rd International Conference on Image Processing, Computer Vision and Machine Learning 重要信息 大会官网&#xff1a;参会投稿/了解会议详情 大会时间&#xff1a;2024年11月22日-24日 大会地…

大米cms支付逻辑漏洞

1.打开环境 注册账户 随机选择一个产品 修改数据