当前位置: 首页 > news >正文

Let‘s Encrypt免费证书的应用示例

文章目录

  • 前言
  • 证书申请
  • 证书介绍
    • cert.pem
    • chain.pem
    • fullchain.pem
    • privkey.pem
  • 使用步骤
    • 搭建简易demo应用
    • 新建nginx配置文件
    • 测试SSL是否生效
  • 总结

前言

最近在搞苹果应用上架的问题,据说用HTTP会被拒,但貌似不绝对,2017年苹果曾发公告说必须要求HTTPS,紧接着便说延缓这个决定,也就是说现在用HTTP也不一定会被限制,但是确实存在风险,所以想着最近把HTTP请求升级成HTTPS,本着折腾的精神(其实还是穷)搞一搞免费证书,Let’s Encrypt 这个组织之前一篇文章《使用 Let’s Encrypt 获取免费SSL证书》 曾讲到过,我们今天来说下这个证书怎么用,算是给我自己出个教程,拯救一下我记忆力减退的大脑~

证书申请

使用Let’s Encrypt申请SSL证书,可以选择 DNS-01 验证或者 HTTP-01 验证,其中 HTTP-01 可以利用类似 nginx 插件完成证书的自动更新,因为我的环境有点尴尬,80端口总是被各种服务占用,一直也没有成功,但还是列举下步骤,等待后面尝试

sudo yum install epel-release
sudo yum install certbot python2-certbot-nginx # 安装依赖,Ubuntu安装python-certbot-nginx
sudo certbot --nginx -d www.example.com # 生成验证SSL证书
sudo systemctl list-timers # 验证自动续期是否已经配置
sudo certbot renew --dry-run # 确保自动续期正常工作
sudo systemctl reload nginx # 诚信加载配置
openssl s_client -connect www.example.com:443 # 测试证书是否可用

使用 DNS-01 验证可以生成证书后手动配置,命令很简单 sudo certbot certonly --manual --preferred-challenges dns -d www.example.com,具体步骤我就不重复写了,参考上篇

证书介绍

假设我为 checkssl.008ct.space 成功生成了证书,那么会得到以下4个文件,分别介绍一下它们

[root@VM-0-3-centos live]# ll /etc/letsencrypt/live/checkssl.008ct.space/
total 4
lrwxrwxrwx 1 root root  38 Feb 28 13:45 cert.pem -> ../../archive/checkssl.008ct.space/cert1.pem
lrwxrwxrwx 1 root root  39 Feb 28 13:45 chain.pem -> ../../archive/checkssl.008ct.space/chain1.pem
lrwxrwxrwx 1 root root  43 Feb 28 13:45 fullchain.pem -> ../../archive/checkssl.008ct.space/fullchain1.pem
lrwxrwxrwx 1 root root  41 Feb 28 13:45 privkey.pem -> ../../archive/checkssl.008ct.space/privkey1.pem
-rw-r--r-- 1 root root 692 Feb 28 13:45 README

cert.pem

  • 这是 服务器证书(Server Certificate),它是 Let’s Encrypt 为你的域名生成的证书,代表你的服务器身份。
  • 它包含了你的公钥和其他证书信息。
  • 你需要将它配置到 Nginx 中,以便客户端能够验证服务器的身份。

chain.pem

  • 这是 中间证书(Intermediate Certificate),它链接了你的证书和根证书(Root Certificate)。
  • 客户端在验证服务器证书时,需要通过链条的中间证书才能找到受信任的根证书。因此,chain.pem 文件有助于建立证书链的完整性。

fullchain.pem

  • 这是将 服务器证书中间证书 合并在一起的文件。它包含了 cert.pemchain.pem 的内容,客户端验证时需要的是完整的证书链。
  • 推荐在 Nginx 配置中使用 fullchain.pem,因为它包含了所有必要的证书链信息。

privkey.pem

  • 这是 私钥(Private Key),它是你服务器的私密密钥。它用来加密和解密 SSL/TLS 会话。
  • 该文件必须与证书配对,并且应该非常小心地保管,避免泄露。泄露私钥会导致证书被滥用。

使用步骤

证书已经生成好了,假设我们之前有一个引用,支持http和websocket协议,HTTP监听8881端口,WS监听8882端口,通过域名 checkssl.008ct.space 访问,现在需要把他们改成支持HTTPS和WSS,直接修改应用的代价比较大,同时加解密放到应用程序上带来性能损失,这里就可以利用nginx来完成SSL终止,具体操作如下:

搭建简易demo应用

直接用 python3 写一个web应用就行,将以下内容保存到文件app.py中, 通过 python3 app.py 运行即可

import asyncio
import threading
import websockets
from flask import Flask# 创建 Flask 应用(HTTP 服务)
app = Flask(__name__)@app.route('/')
def hello():return "Hello from HTTP server on port 8881!"# WebSocket 处理函数
async def websocket_handler(websocket, path):print(f"New WebSocket connection: {websocket.remote_address}")await websocket.send("Hello from WebSocket server on port 8882!")await websocket.wait_closed()# 启动 Flask 应用的线程(HTTP 服务)
def start_flask():app.run(host='0.0.0.0', port=8881)# 启动 WebSocket 服务的线程
def start_websocket():# 为子线程创建一个新的事件循环loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)start_server = websockets.serve(websocket_handler, "0.0.0.0", 8882)loop.run_until_complete(start_server)loop.run_forever()# 启动两个服务(HTTP 和 WebSocket)
if __name__ == '__main__':# 启动 HTTP 服务flask_thread = threading.Thread(target=start_flask)flask_thread.start()# 启动 WebSocket 服务websocket_thread = threading.Thread(target=start_websocket)websocket_thread.start()

新建nginx配置文件

在目录 /etc/nginx/conf.d/ 下创建 checkssl.conf 文件,编写内容如下:

server {listen 8871 ssl;server_name checkssl.008ct.space;# SSL 配置ssl_certificate /etc/letsencrypt/live/checkssl.008ct.space/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/checkssl.008ct.space/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;# HTTP 转发到 8881 端口location / {proxy_pass http://127.0.0.1:8881;  # 转发到 HTTP 服务(Flask)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;}
}server {listen 8872 ssl;server_name checkssl.008ct.space;# SSL 配置ssl_certificate /etc/letsencrypt/live/checkssl.008ct.space/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/checkssl.008ct.space/privkey.pem;ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;# WebSocket 转发到 8882 端口location / {proxy_pass http://127.0.0.1:8882;  # 转发到 WebSocket 服务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;# WebSocket 配置proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';}
}

编写完成重新加载配置文件,使用命令 nginx -s reload

测试SSL是否生效

测试 HTTPS 直接在浏览器访问 https://checkssl.008ct.space:8871 就行了,在地址栏会显示一把小锁表示网站安全,但是测试 WSS 就不能直接用浏览器了,可以使用python脚本或者js脚本来测试,这里我们用html页面内嵌js来发送WSS请求,点击按钮后发现也是能正常访问服务的。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>WebSocket Test</title>
</head>
<body><h1>WebSocket Test</h1><button onclick="connect()">Connect to WebSocket</button><div id="message"></div><script>let socket;function connect() {socket = new WebSocket('wss://checkssl.008ct.space:8872');socket.onopen = function() {document.getElementById('message').innerHTML = 'Connected to WebSocket!';socket.send("Hello Server!");};socket.onmessage = function(event) {document.getElementById('message').innerHTML = 'Message from server: ' + event.data;};socket.onerror = function(error) {document.getElementById('message').innerHTML = 'Error: ' + error.message;};socket.onclose = function() {document.getElementById('message').innerHTML = 'WebSocket connection closed.';};}</script>
</body>
</html>

发现一个秘密,一直我还以为自己使用这只有90天有效期的 Let's Encrypt 的有点麻烦,今天才发现Vercel平台免费颁发的证书都是这种,不过也够用了,AWS的证书倒是会标记组织为 Amazon

总结

  • 选择 HTTP-01 验证需要占用80端口,可以通过插件实现SSL证书的自动续期
  • 使用 DNS-01 验证得手动添加DNS记录,命令就一条 sudo certbot certonly --manual --preferred-challenges dns -d www.example.com
  • Nginx可以完成SSL终止,将HTTPS转为HTTP,将WSS转为WS,降低应用服务器的负载
  • Let’s Encrypt 颁发的证书有效期是 90 天,减少了证书被泄露或滥用的潜在的风险,鼓励用户采用自动化续期机制

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

父王只是想用自己的经验为你谋个幸福,但现在看来,父辈的经验,毕竟是过往,未必全对,你的路还需你去闯。今后,忠于自己内心的选择吧~

2025-2-22 08:30:00 在这个和父亲第一次一起看电影的影院里,屏幕上出现了这段话,一切都像是被安排好了一样。

相关文章:

Let‘s Encrypt免费证书的应用示例

文章目录 前言证书申请证书介绍cert.pemchain.pemfullchain.pemprivkey.pem 使用步骤搭建简易demo应用新建nginx配置文件测试SSL是否生效 总结 前言 最近在搞苹果应用上架的问题&#xff0c;据说用HTTP会被拒&#xff0c;但貌似不绝对&#xff0c;2017年苹果曾发公告说必须要求…...

threeJS——安装以及三要素

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装二、三要素1.场景1.1创建场景1.2向场景添加元素1.3场景属性 2.相机2.1相机特点2.2正交相机2.3空间布局2.4小姐操作 3.渲染器 总结 前言 本章简单介绍前…...

【Electron入门】进程环境和隔离

目录 一、主进程和渲染进程 1、主进程&#xff08;main&#xff09; 2、渲染进程&#xff08;renderer&#xff09; 二、预加载脚本 三、沙盒化 为单个进程禁用沙盒 全局启用沙盒 四、环境访问权限控制&#xff1a;contextIsolation和nodeIntegration 1、contextIsola…...

提示词框架介绍和使用场景

框架介绍 CO-STAR 框架 定义 CO-STAR是六个关键要素的缩写,每个字母代表一个特定的部分: Context(上下文) :提供任务的背景信息或环境 当前任务是为一家科技公司撰写一篇关于人工智能发展趋势的文章/ 需要为一场面向高中生的科普讲座准备内容Objective(目标) :明确任…...

牛客NC288803 和+和

​import java.util.Comparator;import java.util.PriorityQueue;import java.util.Scanner;​public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner sc new Scanner(System.in);// 读取两个整数n和m&#xff0c;分别表示数组的…...

AI学习第七天

数组&#xff1a;基础概念、存储特性及力扣实战应用 在计算机科学与数学的广袤领域中&#xff0c;数组作为一种极为重要的数据结构&#xff0c;发挥着不可或缺的作用。它就像一个有序的 “数据仓库”&#xff0c;能高效地存储和管理大量数据。接下来&#xff0c;让我们深入了解…...

【uniapp原生】实时记录接口请求延迟,并生成写入文件到安卓设备

在开发实时数据监控应用时&#xff0c;记录接口请求的延迟对于性能分析和用户体验优化至关重要。本文将基于 UniApp 框架&#xff0c;介绍如何实现一个实时记录接口请求延迟的功能&#xff0c;并深入解析相关代码的实现细节。 前期准备&必要的理解 1. 功能概述 该功能的…...

XR应用测试:探索虚拟与现实的边界

引言 随着XR&#xff08;扩展现实&#xff0c;Extended Reality&#xff09;技术的快速发展&#xff0c;VR&#xff08;虚拟现实&#xff09;、AR&#xff08;增强现实&#xff09;和MR&#xff08;混合现实&#xff09;应用逐渐渗透到游戏、教育、医疗、工业等多个领域。对于…...

算法之算法思想

算法思想 ♥算法思想知识体系详解♥ | Java 全栈知识体系 经典算法思想总结 经典算法思想总结&#xff08;含LeetCode题目推荐&#xff09; | JavaGuide...

mac电脑中使用无线诊断.app查看连接的Wi-Fi带宽

问题 需要检查连接到的Wi-Fi的AP硬件支持的带宽。 步骤 1.按住 Option 键&#xff0c;然后点击屏幕顶部的Wi-Fi图标&#xff1b;2.从下拉菜单中选择 “打开无线诊断”&#xff08;Open Wireless Diagnostics&#xff09;&#xff1b;3.你可能会看到一个提示窗口&#xff0c;…...

物理竞赛中的线性代数

线性代数 1 行列式 1.1 n n n 阶行列式 定义 1.1.1&#xff1a;称以下的式子为一个 n n n 阶行列式&#xff1a; ∣ A ∣ ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ∣ \begin{vmatrix}\mathbf A\end{vmatrix} \begin{vmatrix} a_{11…...

FFmpeg-chapter3-读取视频流(原理篇)

ffmpeg网站&#xff1a;About FFmpeg 1 库介绍 &#xff08;1&#xff09;libavutil是一个包含简化编程函数的库&#xff0c;包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 &#xff08;2&#xff09;libavcodec是一个包含音频/视频编解码器的解码器和编…...

机器视觉线阵相机分时频闪选型/机器视觉线阵相机分时频闪选型

在机器视觉系统中,线阵相机的分时频闪技术通过单次扫描切换不同光源或亮度,实现在一幅图像中捕捉多角度光照效果,从而提升缺陷检测效率并降低成本。以下是分时频闪线阵相机的选型要点及关键考量因素: 一、分时频闪技术的核心需求 多光源同步控制 分时频闪需相机支持多路光源…...

「Selenium+Python自动化从0到1②|2025浏览器操控7大核心API实战(附高效避坑模板))」

Python 自动化操作浏览器基础方法 在进行 Web 自动化测试时&#xff0c;操作浏览器是必不可少的环节。Python 结合 Selenium 提供了强大的浏览器操作功能&#xff0c;让我们能够轻松地控制浏览器执行各种任务。本文将详细介绍如何使用 Python 和 Selenium 操作浏览器的基本方法…...

矩阵系列 题解

1.洛谷 P1962 斐波那契数列 题意 大家都知道&#xff0c;斐波那契数列是满足如下性质的一个数列&#xff1a; F n { 1 ( n ≤ 2 ) F n − 1 F n − 2 ( n ≥ 3 ) F_n \left\{\begin{aligned} 1 \space (n \le 2) \\ F_{n-1}F_{n-2} \space (n\ge 3) \end{aligned}\right. …...

活动报名:Voice Agent 技术现状及应用展望丨 3.8 北京

「人人发言&#xff0c;所有人向所有人学习&#xff01;」——Z 沙龙 「一起探索下一代语音驱动的人机交互界面。」——RTE 开发者社区 3 月 8 日周六下午&#xff0c;北京&#xff0c;「智谱 Z 计划&Z Fund」和「RTE 开发者社区」将合办一场 Voice Agent 主题的线下活动…...

【卡牌——二分】

题目 分析 发现答案具有二分性&#xff0c;果断二分答案 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 2e510;int n, a[N], li[N]; ll m;bool check(int x) {ll t m;for(int i 1; i < n; i){if(a[i] > x) continue; //…...

《第十五部分》STM32之FLASH闪存(终结篇)

本章是江科大自学STM32的最后一章节&#xff0c;历经2个月的断断续续时间&#xff0c;终于学到了最后&#xff0c;总结&#xff0c;这次的学习历程&#xff0c;相对于学习51还是略出一些难度&#xff0c;也就是若你是非科班&#xff0c;学习起来还是有一定的难度的&#xff0c;…...

属性的设置

笔记 class Student:def __init__(self, name, gender):self.name nameself.__gender gender # self.__gender 是私有的实例属性# 使用property 修改方法&#xff0c;将方法转成属性使用propertydef gender(self):return self.__gender# 将我们的gender这个属性设置为可写属…...

本地部署Deepseek+Cherry Studio

为啥要本地部署deepseek&#xff1f; 因为给deepseek发送指令得到服务器繁忙的回馈&#xff0c;本地部署会运行的更快 1.Ollama安装与部署 Ollama是一个开源框架&#xff0c;专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计 winR——cmd——ol…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...