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

NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书

Certificate证书

Certificate称为数字证书。数字证书是一种证明身份的电子凭证,它包含一个公钥和一些身份信息,用于验证数字签名和加密通信。数字证书在网络通信、电子签名、认证授权等场景中都有广泛应用。其特征如下:

  • 由权威机构颁发,人们可以在互联网上用来识别对方的身份。
  • 证书遵循国际标准 ITUTX.509,主要包括下面的内容:
    • 版本信息
    • 序列号,每个证书都有唯一的序列号
    • 使用的签名算法
    • 签发机构(命名规则一般采用 X.500格式)
    • 有效期
    • 证书所有人的名称
    • 证书所有人的公钥 public key
    • 证书发行者的签名

证书等级

  • Root Cartificate:根证书

根证书:签名(Root CA's signature)是用根私钥(Root CA's private key)签的。所以验证根证书签名(Root CA's signature)要用根公钥(Root CA's public key)才能验证通过。这种情况称为自签名(self-sign)。

  • Intermediate Cartificate:中间证书

中介证书是被根证书签名的证书,是被根证书的私钥进行签名的,因此要验证中介证书也需要使用根公钥。

  • End-entity Certificate:终端实体证书

终端实体证书是有中介证书签发的;使用中介证书对终端实体进行认证的目的是为了减少根证书签名的负担,相当于使用一个中介来代替根实行认证的权利。

证书链

在RFC5280中,证书链或信任链被定义为“证书路径”。换句话说,信任链是指您的SSL证书以及它如何链接回受信任的证书颁发机构。为了使SSL证书可信,它必须可以追溯到它被签署的信任根,这意味着链中的所有证书——终端实体证书、中间证书和根证书,都需要得到适当的信任。信任链分为三个部分:

Windows证书管理

通过Win+R运行:mmc确定,文件->添加/删除管理单元,进行配置证书管理。

证书工具

证书的管理工具有很多,下面列举几种常用的工具:

  • PowerShell CLI:New-SelfSignedCertificate
  • CMD CLI:Certutil
  • X Certificate and Key management
  • CMD CLI:OpenSSL
  • JDK CTL:keytool

New-SelfSignedCertificate

在Windows中,通过PowerShell CLI:New-SelfSignedCertificate进行创建自定义签名证书。说实话,笔者翻烂了官方文档对该工具使用介绍挺粗糙的,一堆的坑准备好踩吧。

1、创建X509证书链

# PowerShell环境(以管理员身份运行)# 默认存储位置:cert:LocalMachine\My【本地计算机\个人】
#准备条件
$pfxPassword = ConvertTo-SecureString -String "[pfx加密]" -Force -AsPlainText
$pfxFilePath = "[pfx文件路径]"
$cerFilePath = "[cer文件路径]"# 语法结构
New-SelfSignedCertificate `
-Subject [颁发给] `
-DnsName [使用者可选名称(Web域名)] `
-NotAfter (Get-Date).AddYears(20) `
-CertStoreLocation "cert:LocalMachine\My" `
-FriendlyName "[友好名称]" `
-HashAlgorithm SHA256 `
-KeyUsageProperty All `
-KeyUsage CertSign, CRLSign, DigitalSignature
-TextExtension @("2.5.29.19={text}CA=1&pathlength=1")# 可缺省-Subject参数时,生成证书时默认取DnsName信息为[颁发给]者。
# 可缺省 -KeyAlgorithm和-KeyLength参数时,默认为RSA 2048。
# 可缺省 -NotBefore参数时,默认为从系统当前时间起始。
# 可缺省 -NotAfter参数时,生成证书时默认有效期为1年。
# 可缺省-FriendlyName参数时,生成证书时[友好名称]为空。
# 可缺省 -HashAlgorithm参数时,默认值SHA256。
# 可缺省 -KeyUsageProperty参数,指定私钥的键用法属性的键用法。默认值None。(使用底层KSP的默认值)# 必须 -KeyUsage参数[密钥用法],指定在证书的密钥使用扩展名中设置的密钥用法。可接受的参数项:
# CertSign:证书签名
# CRLSign:CRL签名
# DataEncipherment:数据加密
# DecipherOnly
# DigitalSignature:数字签名
# EncipherOnly
# KeyAgreement
# KeyEncipherment:钥匙加密
# None:缺省时无
# NonRepudiation# 必须 -TextExtension参数[目的用途],指定证书扩展数组为字符串,每个字符串必须采用OID对象标识符。
# 所有颁发的策略 (2.5.29.32.0)
# 客户端身份验证 (1.3.6.1.5.5.7.3.2)
# 服务器身份验证 (1.3.6.1.5.5.7.3.1)
# BitLocker驱动器加密 (1.3.6.1.4.1.311.67.1.1)
# 加密文档系统 (1.3.6.1.4.1.311.10.3.4)
# 文档签名 (1.3.6.1.4.1.311.10.3.12)
# 安全电子邮件 (1.3.6.1.5.5.7.3.4)
# 语法: TextExtension @(2.5.29.37={text}{oid},{oid})
# Example: TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1")
(1) Root根证书

根证书完全不需要-Subject [颁发给]和-DnsName [使用者可选名称(Web域名)],只需要起个友好名称做为颁发者,示例如下:

# Root certificate generationNew-SelfSignedCertificate `
-Subject "Kingser RSA Root Certificate Authority 2022" `
-NotAfter (Get-Date).AddYears(30) `
-CertStoreLocation "cert:LocalMachine\My" `
-FriendlyName "Kingser RSA Root Certificate Authority 2022" `
-KeyUsageProperty All `
-KeyUsage CertSign, CRLSign, DigitalSignature `
-TextExtension @("2.5.29.19={text}CA=1&pathlength=1")# Gets certificate generation the path
$certificatePath = ( Get-ChildItem -Path cert:\LocalMachine\My\"[指纹码]" )# create temporary certificate path
$tmpPath = "E:\Certificate"
If(!(test-path $tmpPath))
{
New-Item -ItemType Directory -Force -Path $tmpPath
}# set certificate password here
$pfxPassword = ConvertTo-SecureString -String "[pfx加密]" -Force -AsPlainText
$pfxFilePath = "E:\Certificate\rootCert.pfx"
$cerFilePath = "E:\Certificate\rootCert.cer"

具体实操如下 

 这里有几个坑,需要特别说明一下:

a. # Root certificate generation部分

由于证书生成时,一般默认会指定存放在:cert:LocalMachine\My或cert:CurrentUser\My处。

当执行成功时,系统自动会产生证书的Thumbprint指纹码(如上图)。同时,系统在My和CA两处都会产生该证书,也就是个人证书和中间证书两处入口。不过经检查发现,它指向的仍是同一证书(指纹码相同),但唯独Root根证书不会产生,这是什么原因呢?

经笔者反复测试后,在My和CA两处入口时,它的下级证书创建时才能成功,不然会提示找不到父级证书,导致失败:

 换句话说,-Signer参数似乎只能参照My或CA处的证书,Root受信任区的不能直接拿来生成证书链的子证书。此处微软文档翻烂了笔者都没找到相关资料,巨坑。

b. # Gets certificate generation the path部分

$rootCertPath通过Get-ChildItem -Path cert:\LocalMachine\XX的证书对象,当我把证书注册到Root信任区就无法调用,不可用。

那它为啥会在My和CA两处入口都引用该证书呢?其实笔者也没敢说整明白了。只能从经验上判断当生成证书为子证书时,系统逻辑有可能优先判断该证书是哪个入口开始检索。比如中间证书,所参照父级证书位置当优先从C入口开始检查是否有,没有的话再检索My入口处。不一定正确仅供参考。

c. # create temporary certificate path部分

导出时,可设定一个临时存储证书路径(可选)。当配置了该存放路径时,导出文件变量可以这样:

$pfxFilePath = $tmpPath +"\rootCert.pfx"
$cerFilePath = $tmpPath +"\rootCert.cer"
(2) CA中间证书

中间证书的生成,关键性参数是-Signer参照父级证书,可以设定DnsName域名:

# Gets certificate generation the path
$parentCertPath =( Get-ChildItem -Path cert:\LocalMachine\My\"[指纹码]")# Intermediate certificate generation
New-SelfSignedCertificate `
-Subject [颁发给] `
-DnsName [域名] `
-Signer $parentCertPath `
-NotAfter (Get-Date).AddYears(20) `
-CertStoreLocation "cert:LocalMachine\My" `
-FriendlyName "[友好名称]" `
-KeyUsageProperty All `
-KeyUsage CertSign, CRLSign, DigitalSignature `
-TextExtension @("2.5.29.19={text}CA=1&pathlength=1")# set certificate password here
$intermediateCer =( Get-ChildItem -Path cert:\LocalMachine\My\"[指纹码]")
$pfxFilePath = "E:\Certificate\intermediateCert.pfx"
$cerFilePath = "E:\Certificate\intermediateCert.cer"# Export PfxCertificate the file
$intermediateCer | Export-PfxCertificate -FilePath $pfxFilePath -Password $pfxPassword
# Export Certificate the file
$intermediateCer | Export-Certificate -FilePath $cerFilePath

当然需要注意,-NotAfter参数到期时间,肯定是小于根证书年限的。 具体实操如下 

(3) My终端实体证书

终端证书的生成,同样关键性参数是-Signer参照父级证书,设定DnsName域名基本和中间证书相似。唯一不同的则是-TextExtension参数[目的用途]。比如双向验证时,客户端证书则是提交服务器身份验证,服务端提交客户端身份验证则称之为双向。单向验证仅需要客户端提交服务器身份验证就可以。

它还可以用文件存储系统加密验证,驱动程序签名验证以及文档签名验证等。

# Gets certificate generation the path
$intermediateCer =( Get-ChildItem -Path cert:\LocalMachine\My\"[指纹码]")# End-Entity certificate generation
New-SelfSignedCertificate `
-Subject [颁发给] `
-DnsName [二级域名] `
-Signer $intermediateCer `
-NotAfter (Get-Date).AddYears(3) `
-CertStoreLocation "cert:LocalMachine\My" `
-FriendlyName "[友好名称]" `
-KeyUsageProperty All `
-KeyUsage DigitalSignature, KeyEncipherment, DataEncipherment `
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1")# set certificate password here
$clientCer =( Get-ChildItem -Path cert:\LocalMachine\My\"[指纹码]")
$pfxFilePath = "E:\Certificate\clientCert.pfx"
$cerFilePath = "E:\Certificate\clientCert.cer"# Export PfxCertificate the file
$clientCer | Export-PfxCertificate -FilePath $pfxFilePath -Password $pfxPassword
# Export Certificate the file
$clientCer | Export-Certificate -FilePath $cerFilePath

具体实操如下 

 此处,仍可再单独配置[客户端身份验证]证书,以备服务器部署验证来源客户端身份。在此就不展开详述,感兴趣的朋友可自行适应创建。

 2、证书部署及管理

#准备条件
$cerFilePath = "E:\Certificate\rootCert.cer"# 导入Root根证书
Import-Certificate -FilePath $cerFilePath -CertStoreLocation Cert:\LocalMachine\Root
# Cert:\LocalMachine\Root是本地计算机根
# Cert:\CurrentUser\Root是当前用户根# 检查并移除重复引用的证书
# 检查cert:\LocalMachine\My的重复的Root和CA证书,并移除# 先检查出要移除的证书指纹码,然后通过Remove-Item进行移除。Remove-Item 参数-DeleteKey为连同私钥一并移除(慎用)
Get-ChildItem -Path cert:\LocalMachine\My
Remove-Item -Path cert:\LocalMachine\My\[指纹码]# 可以通过检索DnsName值,进行移除
Get-ChildItem -Path cert:\LocalMachine\My -DnsName *xxx* | Remove-Item

 3、Certutil CLI工具

Certutil 是 Windows 操作系统上预装的工具,可用于 校验文件MD5、SHA1、SHA256,下载恶意文件和免杀。它是一个 CLI 程序,可用于转储和显示证书颁发机构(CA),配置信息,证书服务, CA 组件的备份和还原以及验证证书、密钥对和证书链,它作为证书服务的一部分安装。

实际上,Certutil用途非常广泛,它即可以作为渗透测试工具,也可以作为Windows证书管理的运维工具。

Certutil的主要功能包括查看证书、导出证书、导入证书、验证证书链、生成密钥对等。它通常被系统管理员和安全专家用于管理和维护证书、密钥和证书颁发机构(CA)相关的任务。

Certutil命令的设计旨在提供一种灵活而强大的方式来处理数字证书和密钥,以确保系统的安全性和可信度。

可在命令提示符下输入"certutil /?"来查看完整的命令参数列表和使用说明。

具体详解,请见微软官方文档。

# 检查证书存储,列出本地计算机或用户的证书存储中的证书
certutil -v -store my
certutil -v -store -user my# 从文件查看证书详细内容
certUtil -v -dump rootCert.cer

 Certificate and Key management

XCA是一个用于管理非对称密钥(如RSA或DSA)的接口。它被用作创建和签署证书的小型CA。它使用OpenSSL库进行加密操作。

开源地址:GitHub - chris2511/xca: X Certificate and Key management,官方安装包:Download

注意它可以直接通过Microsoft Store微软商店进行安装,也可以手动下载MSI包来使用。

最新版本为xca-2.6.0-win64.msi。

1、新建数据库

新使用该工具时,需要新建一个xdb(XCA Database)数据库用来存储证书信息,需要设置一个数据库密码。

2、X509证书构造

序号属性名属性学名

Windows

表示

XCA

表示

描述说明
1Id序列号--
2country Name国家代码--
3stateOrProvince Name州或省名--
4locality Name地方名--
5organization Name组织名--
6organizationUnit Name单位名--
7common Name通用名(*)

颁发者

使用者

内部名称
8email Address邮件地址--
9-签名状态UnusedBits
10-私钥(*)HashAlgorithmRSA 2048
11-

有效期

从...到

NotBefore

NotAfter

12-指纹Thumbprint

[待续]

 参考文档

  • 在PowerShell中创建证书
  • 如何:创建开发期间使用的临时证书
  • 关于证书提供程序
  • Certificate 提供程序
  • 网络安全 / SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12 作用及区别

相关文章:

NET8部署Kestrel服务HTTPS深入解读TLS协议之Certificate证书

Certificate证书 Certificate称为数字证书。数字证书是一种证明身份的电子凭证,它包含一个公钥和一些身份信息,用于验证数字签名和加密通信。数字证书在网络通信、电子签名、认证授权等场景中都有广泛应用。其特征如下: 由权威机构颁发&…...

DML数据库的数据类型

DML 用于改变数据表中的数据的操作语言。 包括INSERT(将数据插入到数据表中),UPDATE(更新表中已经存在的数据),DELETE(删除表中已经存在的数据) INSERT 用法 INSERT INTO 表名(字段1&#x…...

@RequestParam和@PathVariable 处理 HTTP 请求参数的注解

RequestParam 请求参数 可解析前端get请求路径后以问号拼接的参数,查询参数是 URL 后面的问号 (?) 后跟的一系列键值对,RequestParam 可以设置参数是否是必需的(使用 required 属性) GetMapping("/users") public String getUsers(RequestPar…...

《代码大全》读书笔记-第Ⅰ部分 奠定基础

0.欢迎来到软件构建世界 什么是软件构件: 对于非正式及项目,会觉得罗列出来的这些活动太过于繁复。但是这些对于正式项目都是很有必要的(大部分人都没经历过,比如说我)。一般一些小公司主要也就是需求分析、编码、开发人员自测、集成测试这几…...

杰发科技Bootloader(1)—— Keil配置地址

IAP方式 BootLoader方式 UDSBoot方式 AC7801的地址分配 用户空间的的地址从8000000开始分配,大小是64页,即128K。 RAM地址从20000000开始 基于UDSboot调试-Boot 烧录Boot之后,ATClinkTool无法连接 用keil查看内存,地址到8005388…...

338. 比特位计数

338. 比特位计数 题目链接&#xff1a;338. 比特位计数 代码如下&#xff1a; class Solution { public:vector<int> countBits(int n) {vector<int> res(n 1, 0);for (int i 1; i < n; i){if (i % 2 1) { res[i] res[i - 1] 1; }else { res[i] res[i …...

flask后端+vue前端——后端怎么发文件给前端?

首先&#xff0c;前端axios请求的responseType要设置为blob const service axios.create({baseURL: http://127.0.0.1/api,timeout: 5000});//向后端发送数据&#xff0c;后端根据这个数据data生成文件返回send_coordinate(data){return service.post(/,data,{responseType: …...

计算机毕业设计django+hadoop+scrapy租房可视化 租房推荐系统 租房大屏可视化 租房爬虫 spark 58同城租房爬虫 房源推荐系统

python scrapy bootstrap jquery css javascript html 租房信息数据展示 租房地址数量分布 租房类型统计 租房价格统计分析 租房面积分析 房屋朝向分析 房屋户型平均价格统计分析 房屋楼层统计分析 房屋楼层与价格统计分析 房屋地址与价格统计分析 房屋相关信息词云展示 租房…...

【Tomcat】Mac M3 Pro安装Tomcat7

文章目录 下载配置环境变量修改权限启动和关闭 下载 官网&#xff1a;https://tomcat.apache.org/ cd ~/Library tar -zxvf /Users/用户名/Downloads/apache-tomcat-7.0.99.tar.gz mv apache-tomcat-7.0.99 ~/Library/tomcat配置环境变量 vi ~/.bash_profileexport TOMCAT…...

Spring Boot(八十二):SpringBoot通过rsa实现API加密

项目中使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密 。 下面开始代码演示 1 接口加密 1.1 新建一个springboot项目 1.2 添加依赖 <dependency>&l…...

巴黎奥运启幕 PLM系统助力中国制造闪耀全球

2024巴黎奥运会将于法国当地时间7月26日在塞纳河畔正式开幕。即将亮相巴黎奥运会赛场的除了中国运动员之外&#xff0c;还有一批批中国制造企业为奥运会设计并制造的体育设备也将惊艳亮相&#xff0c;成为赛场上另一道亮丽的风景线。 在新时代的浪潮中&#xff0c;中国制造业坚…...

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC&#xff1a;Reduced Instruction Set Computing)&#xff0c;它所用的指令比较简单&#xff0c;有如下特点&#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …...

【JavaScript】01数组原型对象的最后一个元素、计数器

题目一&#xff1a;数组原型对象的最后一个元素 请你编写一段代码实现一个数组方法&#xff0c;使任何数组都可以调用 array.last() 方法&#xff0c;这个方法将返回数组最后一个元素。如果数组中没有元素&#xff0c;则返回 -1 。 你可以假设数组是 JSON.parse 的输出结果。…...

解决R语言找不到系统库导致的报错

1、基本需知 1.1、系统库 系统库&#xff08;System library&#xff09;是一组预先编写和编译好的软件模块集合&#xff0c;用于支持操作系统的基本功能和提供一些常见的服务。这些库通常由操作系统或第三方开发者提供&#xff0c;并且在系统安装过程中被预装或者用户可以额…...

Java高并发理论基础

并发级别 由于临界区的存在&#xff0c;多线程之间的并发必须受到控制。根据控制并发的策略&#xff0c;我们可以把并发的级别分为 阻塞、无饥饿、无障碍、无锁、无等待 几种。 阻塞 一个线程是阻塞的&#xff0c;那么在其他线程释放资源之前&#xff0c;当前线程无法继续执…...

Spring事件机制

文章目录 一、Spring事件二、实现Spring事件1、自定义事件2、事件监听器2.1 实现ApplicationListener接口2.2 EventListener2.3 TransactionalEventListener 3、事件发布4、异步使用 三、EventBus1、事件模式2、EventBus三要素3、同步事件3.1 定义事件类3.2 定义事件监听3.3 测…...

vue+canvas音频可视化

1.代码 <template><div class"subGuide"><canvas id"canvas"></canvas><br><audio id"audio" src"./audio.mp3" controls></audio></div> </template><script> export…...

俊昭stm32笔记

stm32——中断优先级 stm32——创建基础工程模板stm32——创建基础工程模板-CSDN博客 stm32——MCU启动方式stm32——MCU启动方式_stm32调试时程序启动方式-CSDN博客 stm32——串口stm32——串口_stm32 串口-CSDN博客 stm32——lcd液晶显示stm32——lcd液晶显示-CSDN博客...

W30-python03-pytest+selenium+allure访问百度网站实例

此篇文章为总结性&#xff0c;将pystest、selenium、allure结合起来 功能如下&#xff0c;web自动化&#xff0c;输入baidu网站&#xff0c;搜索“雷军”、打开网页中第一条内容 pytestsel.py如下&#xff1a; import time import re import allure import pytest from tools…...

如何在 Debian 8 上安装和使用 PostgreSQL 9.4

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 关系型数据库是满足多种需求的数据组织的基石。它们支持从在线购物到火箭发射等各种应用。PostgreSQL 是一种历史悠久但仍然活跃的…...

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

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

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...