Windows 远程桌面添加 SSL 证书指南

Windows 远程桌面添加 SSL 证书指南

    • 🧾 准备工作
    • 🔐 第一步:使用 Certbot 申请 SSL 证书
    • 📦 第二步:生成 PFX 格式证书文件
    • 📁 第三步:导入证书到 Windows 证书管理器
    • 🔒 第四步:分配证书权限
    • 🧬 第五步:配置注册表绑定 SSL 证书
      • ⚙️ 编辑注册表数据值替代方式:使用 WMIC 设置证书指纹
    • ✅ 最后验证
    • 📝 总结

在企业或个人远程办公场景中,使用 SSL 证书为 Windows 远程桌面(RDP)服务加密通信是非常有必要的。本文将详细介绍如何通过 Let’s Encrypt 获取 SSL 证书,并将其配置到 Windows 远程桌面服务中。


🧾 准备工作

  • 已启用远程桌面功能的 Windows 系统(如 Win10 Pro、Win Server)
  • 具备域名解析能力(用于申请 Let’s Encrypt 证书)
  • 安装 Docker 环境(用于运行 Certbot)

🔐 第一步:使用 Certbot 申请 SSL 证书

我们使用 certbot 的 DNS 手动验证方式申请通配符证书(支持泛域名):

docker run -it --rm \-v /home/docker-nginx/cert:/etc/letsencrypt \-v /home/docker-nginx/log:/var/log/letsencrypt \certbot/certbot certonly \--manual \--preferred-challenges=dns \--server https://acme-v02.api.letsencrypt.org/directory \-d "*.你的域名" -d "你的域名" \--agree-tos \--email 你的邮箱

manual模式执行过程中需要在DNS处手动添加 TXT 记录完成域名所有权验证。


📦 第二步:生成 PFX 格式证书文件

Let’s Encrypt 默认提供的是 PEM 格式的私钥和证书文件,我们需要将其转换为 Windows 可用的 .pfx 格式:

openssl pkcs12 -export -out 自定义名称.pfx -inkey privkey.pem -in fullchain.pem -name "Certificate"

系统会提示你设置一个密码,请妥善保存。


📁 第三步:导入证书到 Windows 证书管理器

  1. 按下 Win + R 键,输入 mmc 打开控制台。
  2. 点击 文件 > 添加/删除管理单元
  3. 选择左侧 证书,点击 添加
  4. 选择 计算机账户,点击下一步,选择 本地计算机
  5. 点击 完成 > 确定
  6. 在左侧导航栏找到 证书(本地计算机) > 个人 > 证书
  7. 右键点击 所有任务 > 导入
  8. 浏览并选择你的 .pfx 文件,按照向导完成导入操作。

✅ 注意:证书存储建议选择“根据证书类型自动选择”。


🔒 第四步:分配证书权限

为了确保远程桌面服务可以访问该证书的私钥:

  1. 回到已导入的证书上,右键选择 所有任务 > 管理私钥。(刚导入后没有看到证书可以右键刷新下)
  2. 点击 添加,输入用户 NETWORK SERVICE
  3. 赋予 读取 权限。
  4. 点击确定完成权限配置。

🧬 第五步:配置注册表绑定 SSL 证书

  1. 按下 Win + R,输入 regedit 打开注册表编辑器。

  2. 定位路径:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
    
  3. 右侧空白处点击右键 > 新建 > REG_BINARY 类型项。

  4. 名称设为:SSLCertificateSHA1Hash

  5. 双击打开该项,在数据值中填入证书指纹(SHA1 值)。

💡 提示:指纹可在证书详细信息页查看,注意去除空格。


⚙️ 编辑注册表数据值替代方式:使用 WMIC 设置证书指纹

如果第五步无法编辑SSLCertificateSHA1Hash的值,可以在管理员权限的 CMD 或 PowerShell 中运行以下命令:

wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="证书指纹"

⚠️ 注意:

  • 必须以管理员身份运行
  • 确保远程桌面服务已启用
  • SHA1 指纹必须为 40 位十六进制字符串,无空格

✅ 最后验证

重启系统或远程桌面服务使配置生效:

Restart-Service TermService -Force

尝试使用新的 SSL 加密连接远程桌面,确认证书是否正常加载。正常加载后远程桌面上会显示一个小锁。


📝 总结

步骤内容
1️⃣使用 Certbot 申请 SSL 证书(DNS 验证)
2️⃣使用 OpenSSL 将证书转换为 .pfx 格式
3️⃣导入证书到 Windows 证书管理器
4️⃣分配 NETWORK SERVICE 用户对私钥的读取权限
5️⃣修改注册表或使用 WMIC 绑定证书指纹
6️⃣重启服务并测试 SSL 连接

📌 提示:

  • 如果你使用的是cloudflare、aliyun、google等域名,也可以结合脚本实现自动更新 TXT 解析记录。
    –dns-cloudflare(Cloudflare)
    –dns-aliyunsdk(阿里云)
    –dns-google(Google Cloud)
  • 若替代方式遇到 Invalid parameter 报错,请检查是否以管理员身份运行命令以及SSLCertificateSHA1Hash已添加成功。

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

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

相关文章

项目实训技术实现——核心关键:基于二叉分割的布局生成算法

核心关键:基于二叉分割的布局生成算法 上一篇针对llava这种为每个元素分别预测每个元素的框的方法进行了分析,已经证实这条路难以行得通。因此,我们考虑直接按照板块划分整个背景布局,然后在板块内,进一步划分出我们需…

uniapp 配置devserver代理

在uniapp项目中配置devserver代理,需要先检查用的vue版本。 vue3不能在manifest.json配置代理。 1.先检查项目用的vue版本 找到manifest.json文件查看vue的版本。 2.vue2在manifest.json内配置 "h5" : { "devServer": { …

移动端 WebView 页面性能调试实战:WebDebugX等工具协同与优化

随着移动互联网的发展,越来越多的应用开始使用 WebView 加载网页内容。然而,这种方式虽然能快速实现跨平台开发,但也带来了很多性能瓶颈,尤其是在移动端设备上。WebView 本身的性能限制、页面加载慢、JS 执行阻塞等问题时常成为开…

临时文件夹大量0字节xml问题排查

某天偶然打开我的c:\users\我的用户名\AppData\Local\Temp 目录,发现有很多0字节的.xml文件,你删除以后一会还会大量产生,如下图: 下载了ProcessMonitor,记录了一会日志,查找*.xml发现是资源管理器在创建这…

突破微小目标检测瓶颈:智能无人机在蓝莓产量估算中的解决方案

【导读】 本文提出了一种使用搭载计算机视觉的智能无人机估算蓝莓产量的方法。系统利用两个YOLO模型:一个检测灌木丛,另一个检测浆果。它们协同工作,智能控制无人机位置和角度,安全获取灌木近景图,实现精准的浆果计数…

API 管理系统实践指南:监控、安全、性能全覆盖

在数字化转型和云原生架构全面普及的当下,API(应用编程接口) 已成为现代技术和业务架构的核心基石。从移动应用到智能硬件,从企业后端系统到 AI 模型调用,几乎所有系统都在通过 API 实现互联互通。API 这个词听起来有点…

Leetcode-​930. 和相同的二元子数组​

Problem: 930. 和相同的二元子数组 思路 滑动窗口 解题过程 我们可以通过计算 和大于等于 goal 的子数组数目 与 和大于等于 goal1 的子数组数目 的差值&#xff0c;来得到 和恰好等于 goal 的子数组数目。 Code c class Solution { public:int at_most(vector<int>&…

『大模型笔记』第1篇:高效请求排队:优化大语言模型(LLM)性能

『大模型笔记』高效请求排队:优化大语言模型(LLM)性能 文章目录 一. 起点:基础的推理引擎二. 问题:“重度用户”会阻塞其他用户三. 解决方案:公平调度3.1. 扩展思路四. 问题:后端队列没有“反压”机制五. 解决方案:获取后端指标5.1 扩展思路六. 替代方案:后端优先级调…

Docker Docker Compose 一键安装

目录 获取安装脚本文件执行安装脚本文件文章结束⚠️ 注意事项&#xff1a;Docker V1 与 V2 的区别 一行命令装 docker 和 docker compose。 你是否厌倦了在不同的 Linux 系统上一遍又一遍地手动安装 Docker 和 Docker Compose&#xff1f;&#x1f914; 不论你是 Ubuntu 、Deb…

Java 单例模式实现方式

Java 单例模式实现方式 单例模式是确保一个类只有一个实例&#xff0c;并提供一个全局访问点的设计模式。以下是 Java 中实现单例模式的几种常见方式&#xff1a; 1. 饿汉式&#xff08;Eager Initialization&#xff09; public class EagerSingleton {// 类加载时就初始化p…

数字化零售如何全面优化顾客体验

一、引言 数字化零售是互联网、大数据、人工智能等技术在零售业中的应用&#xff0c;是现代零售业发展的必然趋势。随着线上购物、移动支付和全渠道销售的普及&#xff0c;零售行业发生了颠覆性的变化。数字化零售不仅提高了企业运营效率&#xff0c;更为顾客提供了便捷、个性化…

rabbitmq 交换机、队列和消息概念

RabbitMQ 是一个功能强大的消息中间件&#xff0c;它采用发布-订阅模式进行消息传递。下面为你详细介绍 RabbitMQ 中交换机、队列和消息的核心概念。 交换机&#xff08;Exchange&#xff09; 交换机在 RabbitMQ 中扮演着接收生产者发送消息的角色&#xff0c;它会根据特定的…

记录一次jenkins slave因为本地安装多个java版本导致的问题

今天&#xff0c;使用jenkins打包&#xff0c;发现slave掉线&#xff0c;上对应机器一看&#xff0c;好家伙&#xff0c;slave运行不起来了。命令行&#xff0c;java -vesion. 没反应&#xff0c;不会是哪个天杀的把java 给卸载了吧&#xff01; 赶紧 where java看下。 还好 ja…

Java中Redis常用的API及其对应的原始API

相信大家写redis的时候经常忘记一些指令吧[狗头][狗头]&#xff0c;这里整理了一下 一、 String&#xff08;字符串类型&#xff09; 1.代码块 // 设置字符串值 stringRedisTemplate.opsForValue().set("key", "value"); // Redis: SET key value// 设置…

C#使用ExcelDataReader高效读取excel文件写入数据库

分享一个库ExcelDataReader &#xff0c;它专注读取、支持 .xls/.xlsx、内存优化。 首先安装NuGet 包 dotnet add package ExcelDataReader dotnet add package System.Text.Encoding.CodePages 编码 内存优化​​&#xff1a;每次仅读取一行&#xff0c;适合处理百万级数据…

雪豹速清APP:高效清理,畅享流畅手机体验

在智能手机的日常使用中&#xff0c;随着时间的推移&#xff0c;手机中会积累大量的垃圾文件&#xff0c;如临时文件、缓存数据、无用的安装包等。这些垃圾文件不仅会占用宝贵的存储空间&#xff0c;还会导致手机运行缓慢&#xff0c;甚至出现卡顿现象。为了解决这一问题&#…

关于使用v-bind绑定多个属性值的问题

背景。自定义表单开发。属性值过多&#xff0c;都写死很臃肿而且不方便维护。通过v-bind绑定非常方便。但是问题又来了。改以怎样的方式处理呢。返回值的格式需要注意 下面是两张动态处理v-bind属性的方法。第一张是写在了方法里面&#xff0c;第二张使用了虚拟属性。使用虚拟…

基于CNN的FashionMNIST数据集识别6——DenseNet模型

源码 import torch from torch import nn from torchsummary import summary""" DenseNet的核心组件&#xff1a;稠密层(DenseLayer) 实现特征复用机制&#xff0c;每个层的输出会与所有前序层的输出在通道维度拼接 """class DenseLayer(nn.Mod…

MySQL 中 INSERT ... ON DUPLICATE KEY UPDATE 为什么会导致主键自增失效?

最近开发的过程中&#xff0c;使用ai生成代码&#xff0c;写了一条这样的SQL&#xff1a;INSERT … ON DUPLICATE KEY UPDATE&#xff0c;然后发现一个奇怪的现象&#xff1a; 为什么使用这个语法后&#xff0c;自增主键&#xff08;AUTO_INCREMENT&#xff09;的值会跳跃甚至…

jenkins流水线打包vue无权限

jenkins在使用npm命令进行拉取依赖时,创建目录会报错无权限&#xff0c;如下如所示 这是因为npm 出于安全考虑不支持以 root 用户运行&#xff0c;即使你用 root 用户身份运行了&#xff0c;npm 会自动转成一个叫 nobody 的用户来运行&#xff0c;而这个用户权限非常低 若需要…