windows和linux上证书的增删查

news2024/12/24 22:05:16

文章目录

    • 引言
    • windows上对个人证书的增删查
      • 创建证书
      • 证书的查找
      • 证书的删除
      • 证书的安装
    • Linux上对个人证书的增删查
      • 创建证书
      • 证书的安装
      • 证书的查看
      • 证书的删除
    • Linux上对系统证书的增删查

引言

PS: 我之前看过《图解密码技术》,已经对证书这些概念有基本的了解,见:密码学简述。所以本文不会涉及证书相关概念的介绍。本文只干一件事(到鹅城只干一件事),那就是,对windows/linux上个人证书的增删查。

之前在知乎上看到一个问题:为什么以前 12306 页面的 https 会被划红线? - 知乎

本文介绍windows和linux上证书的增删查。以上面问题为引,进行展开说明。

我们先打开购票网站,导出它的证书。可以看到它的证书链如下所示:

在这里插入图片描述

因为我的系统信任CECA的证书,所以12306的证书验证通过。

那如何查看当前系统,都信任哪些证书呢?参考如何:使用 MMC 管理单元查看证书 - WCF | Microsoft Learn,我们可以运行certlm.msc查看本地设备的证书,使用certmgr.msc查看当前用户的证书。可以看到,CFCA EV ROOT 的自签名证书被系统信任。

在这里插入图片描述

在windows下,使用上面图形界面,我们可以对证书进行增删查。

但是,图形界面是不方便嵌入到程序中。命令工具和相关的API,更便于在程序中调用。

下面,我们介绍下windows和linux上,命令行对证书的增删查。

证书增删查的API,我没仔细去搜,按下不表。


windows上对个人证书的增删查

在对证书增删查之前,我们查看下证书的存储位置。查看下,增删查的操作对象,身在何处。

然而,参见证书存储 - Windows drivers | Microsoft Learn,证书被存储在注册表中。我去看了一下,人类无法直接进行读取识别。所以,我们后面验证证书是否被安装或者删除,可以使用引用中的方式查看。

下面我们使用certutil | Microsoft Learn,对证书进行操作。

注:certutil.exe在win11中自带。没必要去使用firefox - Mozilla NSS certutil binary - Super User,官方没有提供它的win版本,没有系统自带的香。

除了certutil.exe,还可以通过Certmgr.exe (Certificate Manager Tool) - .NET Framework | Microsoft Learn、 Get-ChildItem (Microsoft.PowerShell.Management) - PowerShell | Microsoft Learn等对证书进行操作。

通常只需要操作当前用户下的个人证书,使用certutil.exe足矣


创建证书

对系统上的证书进行增删查,得先有一个证书。建议网上随意打开一个https的站点,用它的证书实验。

而这里,我选择自签名一张证书,闹着玩。可以跳过本节。(不值得花费时间去了解window下创建证书,虽然我这么做了。用openssl很好,windows和linux下相同的参数,一套搞定。但是,openssl在windows还得安装,懒得安装。)

openssl创建证书是再合适不过的了。但是windows安装openssl可能有点麻烦,至少我没干过,暂时不使用这个方案。

如果是自己闹着玩,可以使用MakeCert - Win32 apps | Microsoft Learn创建一个证书。而文档中已说明,弃用 Makecert,使用New-SelfSignedCertificate (pki) | Microsoft Learn。可以参考创建自签名公用证书来对应用程序进行身份验证 - Microsoft Entra | Microsoft Learn,创建一个证书。

我习惯的逻辑是,创建一个私钥(可以从私钥中导出公钥)->创建一个证书请求->生成证书。但过程似乎略有不同。我们可以在windows powershell ISE中运行下面脚本,生成私钥和证书。

$certname = "dacao"    ## Replace {certificateName}

## 创建一个自签名证书,并将证书存储在当前用户的“个人”的证书存储区中
## -Subject":用于指定证书的名称和其他信息。
## "-KeyExportPolicy":密钥导出策略,指示是否允许通过导出证书来导出私钥。在这里,我们将其设置为“Exportable”,表示允许导出。
##"-KeyExportPolicy":密钥导出策略,指示是否允许通过导出证书来导出私钥。在这里,我们将其设置为“Exportable”,表示允许导出。
## "-KeySpec":密钥规范,指示生成的密钥是用于签名还是加密。在这里,我们将其设置为“Signature”,表示生成的密钥将用于签名操作。
## "-KeyLength":密钥长度,以比特为单位。在这里,我们将其设置为 "2048",表示生成的密钥将为 2048 比特长。
## "-KeyAlgorithm":密钥算法,指示生成的密钥使用的加密算法。在这里,我们将其设置为“RSA”,表示将使用 RSA 算法。
## "-HashAlgorithm":哈希算法,用于生成证书哈希值。在这里,我们将其设置为“SHA256”,该算法生成 256 位哈希值。
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256

## 导出证书到文件
Export-Certificate -Cert $cert -FilePath "E:\download\$certname.cer"   ## Specify your preferred location

## 为证书私钥创建密码,并将其保存在变量中
$mypwd = ConvertTo-SecureString -String "111111" -Force -AsPlainText  ## Replace {myPassword}

## 导出私钥
Export-PfxCertificate -Cert $cert -FilePath "E:\download\$certname.pfx" -Password $mypwd   ## Specify your preferred location

证书的查找

上面创建了一个自签名证书,并将证书存储在当前用户的“个人”的证书存储区中。下面,在命令行查看证书。

## 列出“受信任的根证书颁发机构”中所有的证书
## certutil -store root # 不全
## certmgr /C /s root # 输出不方便过滤
Get-ChildItem -Path "Cert:\CurrentUser\root"

## 列出当前用户证书

certutil -user -store MY # -user表示访问用户存储而不是计算机存储
Get-ChildItem -Path "Cert:\CurrentUser\my"

证书的删除

通常是不需要删除证书的。因为通常情况下,安装后,也没有什么坏处。

## 查找指定名词的证书的哈希值
Get-ChildItem -Path "Cert:\CurrentUser\My" | Where-Object {$_.Subject -Match "dacao"} | Select-Object Thumbprint
Thumbprint
----------
9330B2C240B1C93432C53FF57DA20000B168C054

## 删除该证书
Remove-Item -Path Cert:\CurrentUser\My\9330B2C240B1C93432C53FF57DA20000B168C054 -DeleteKey

# 列出证书-过滤CN
## certID可以是序列号,sha1值,CN, email等
certutil -delstore My certID

证书的安装

certutil.exe -user -addstore My E:\download\dacao.cer

Linux上对个人证书的增删查

linux需要安装下certutil 。certutil命令是由NSS(Network Security Services)提供的证书数据库工具。

sudo apt install libnss3-tools

windows是微软的操作系统,它可以规定证书的存储位置。Linux虽然有文件系统的规范(Filesystem Hierarchy Standard,FHS),但是对于证书存储位置,似乎不会有强制规定。阅读上面链接中的文档,我们可以知道,证书的数据库文件名为cert9.db(旧的数据库文件名为cert8.db)。在家目录下查找下:

 ~ find . -name "cert9.db"
./.mozilla/firefox/dqrmhy2g.default-release/cert9.db
./.pki/nssdb/cert9.db

创建证书

之前不想在windows上安装openssl,所以用了windows自带的cmdlet创建了一个自签名证书。这里,我们使用openssl创建一个证书。

# 创建一个没有密码保护的RSA私钥
openssl genrsa -out private.key 2048

# 创建的key的格式是pem
# rsa -in private.key -inform PEM -text -noout

# 创建一个证书请求
openssl req -new -key private.key  -out dacao.csr -subj "/C=CN/ST=shanghai/CN=da1234cao.top"

# 创建证书
openssl x509 -req -in dacao.csr -signkey private.key -out dacao.pem

证书的安装

certutil -A -d sql:$HOME/.pki/nssdb -i dacao.pem -n "dacao_cert" -t "C,u,u"

证书的查看

# 列出所有的证书
# certutil -d dbm:$HOME/.pki/nssdb -L  # 列出该目录下cert8.db中的证书
certutil -d sql:$HOME/.pki/nssdb -L  # 列出该目录下cert9.db中的证书

certutil -d sql:$HOME/.mozilla/firefox/dqrmhy2g.default-release/ -L

证书的删除

certutil -D -d sql:$HOME/.pki/nssdb  -n "dacao_cert" 

Linux上对系统证书的增删查

linux系统证书的存储位置,参考:SSL Certificate Location on UNIX/Linux - Server Fault、 SSL Certificate Location on UNIX/Linux – Fixya Cloud

如果需要添加或者删除系统信任的证书,可以参考:Linux下管理CA证书(ca-certificates) | WindomZ`s GitHub Pages

ubuntu系统,总的来说,应该是这样(我没实验过):

第一步:把需要添加/删除的证书,添加到/etc/ssl/certs,或者从该目录下移除。

第二步:运行sudo update-ca-certificates,以更新信息(修改/etc/ca-certificates.conf等)。

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

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

相关文章

Docker容器---dockerfile简介

Docker容器---dockerfile简介 一、dockerfile概念1、dockerfile介绍2、基于dockerfile创建3、docker镜像加载原理 二、镜像的创建1、基于现有镜像创建2、基于本地模板创建3、基于dockerfile创建 三、Dockerfile编写1、dockerfile操作指令(1)FROM 镜像&am…

9. 自注意力机制(Self-attention Part2)

P27 自注意力机制(Self-attention Part2) 视频链接 P27 自注意力机制(Self-attention Part2) 计算流程: Multi-head: 应用:

数据结构入门篇:第一篇

数据结构入门篇:第一篇 时间复杂度 数据结构入门篇:第一篇1.时间复杂度2.时间复杂度的练习总结 🤔首先,为什么要学数据结构? 数据结构的概念:在内存中对数据进行管理; 数据结构的学习能让我们在…

C#生成单色bmp图片,转为单色bmp图片 任意语言完全用字节拼一张单色图,LCD取模 其它格式图片转为单色图

最终效果: V1.8.2 20230419 文字生成单色BMP图片4.exe 默认1280*720 如果显示不全,请把宽和高加大 字体加大。 首先,用windows画板生成一张1*1白色单色图作为标准,数据如下: 数据解析参考:BMP图像文件完…

【K8S系列】深入解析StatefulSet(二)

序言 那些看似不起波澜的日复一日,一定会在某一天让你看见坚持的意义。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级论点蓝色:用来标记二级论点 Kubernetes (k8s) 是一个容器编排平…

用梯度下降的方式来拟合曲线

文章目录 1. 简述2. 理论原理以二次函数为例整体的梯度下降步骤: 3. 编码实现初始化权重矩阵计算损失和梯度更新权重 4. 结果首先对上一篇文章中的真实数据拟合。测试拟合高次曲线方程数据是2阶的,拟合方程是2阶的数据是4阶的,拟合方程也是4阶…

3年自动化测试(心路历程),从月薪10k到30k我经历了什么?

前言 2018年的时候,由于项目的原因,开始使用Robot Framework测试框架,正因为有Python的基础所以很快就理解了Robot Framework框架的工作原理,并可以根据项目的需要开发系统关键字。2019年随着移动App越来越流行,乘着换…

HTML5超链接和图片基础用法

一、HTML5 超链接(链接) 超链接可以是一个文本,也可以是一幅图像,您可以点击这些内容来跳转到新的页面或新的文档或者当前文档中的某个部分。 当您把鼠标指针移动到网页中的某个链接上时,箭头会变为一只小手。 1.我…

MATLAB | MATLAB配色不够用,近2000款配色来啦

MATLAB绘图配色不够多?很多python\R语言绘图包都会带着好几套配色方案,比如很常见的ggsci绘图包就自带45套离散配色,于是本工具收集了常见55个绘图包中的离散配色,制作出了这个包含了1967套配色的离散配色包slanCL。 基本使用 以…

机器学习(二):线性回归之梯度下降法

文章目录 专栏导读1、梯度下降法原理2、梯度下降法原理代码实现3、sklearn内置模块实现专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知识。 ✍ 本文录入于《机器学习案例》,本专栏精选了经典的机器学习算法进行讲解,针对大学生、初级数据分…

CleanMyMac4.13最新免费mac电脑系统优化软件

CleanMyMac免费mac下载版是一款简单实用的PC清洁管理工具,电脑刚装完系统的时候运行速度超级快,随着时间的推移,你会发现越来越慢,经常会反应卡顿,越来越多的垃圾文件占用了你的磁盘空间,各种过时的日志&am…

数组题目总结 -- 前缀和数组

目录 一. 区域和检索 - 数组不可变1. 思路和代码I. 博主的做法:II. 东哥的做法: 2. 总结 二. 二维区域和检索 - 矩阵不可变1. 思路和代码I. 博主的做法:II. 东哥的做法: 2. 总结 一. 区域和检索 - 数组不可变 题目链接&#xff1…

【方法一:二分+字符串哈希 优化】【dp——取不取问题-背包】最长公共子串【上海交通大学考研机试题】

最长公共子串 二分方法字符串哈希的复习字符串哈希 如何理解 二分代码 dp方法字符串str1中以第i个字符为结尾的子串 与字符串str2中以第i个字符为结尾的子串的连续公共子串 二维一维优化 二分方法 由于这个题是要求求子串,而子串是连续的一段,所以用二分…

在微信小程序中怎么使用vant框架?

目录标题 首先介绍什么是vant一、第一步,打开我们小程序项目目录,找到所在的位置,打开终端二、对项目进行初始化三、进行安装依赖1、通过npm安装vant/weapp2、安装miniprogram 四、修改app.json五、修改project.config.json六、然后构建npm 需…

使用Word的一些技巧记录

本文主要用于记录书写毕业论文时,遇到的Word的使用技巧。 设置样式及多级列表 每个学校必然会对论文中的字体、字号、行间距提出要求,设置Word中样式解决此问题。 例如,本校的格式要求为: 正文中的一级标题(章目&a…

【C#】GridControl动态更换DataSource,查询数据异常处理

系列文章 【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…

适应大、中、小型医院的手术麻醉临床信息管理系统源码

手术麻醉管理系统是一款专门用于医院手术麻醉管理的软件系统,它可以帮助医院和医生更好地管理手术麻醉过程,提高手术麻醉的质量和安全性。本文将介绍手术麻醉管理系统的实现、功能概述、主要功能、系统设置、麻醉管理、术中记录、苏醒室记录、PCA实施及管…

【微服务笔记20】微服务组件之Nacos配置中心基础环境搭建、配置持久化、动态刷新配置

这篇文章,主要介绍微服务组件之Nacos配置中心基础环境搭建、配置持久化、动态刷新配置。 目录 一、搭建Nacos配置中心环境 1.1、Nacos配置中心介绍 1.2、搭建Nacos配置中心客户端 (1)引入依赖 (2)添加配置信息 &…

图书管理系统的开发与设计(论文+源码)_kaic

摘 要 随着科学技术的快速发展,尤其是计算机技术的突飞猛进,计算机技术普及到日常生活、学习生活的方方面面。由此想到学校的相对于传统的图书管理系统,帮助到学校的读者和学校的图书管理员的系统。提升图书管工作人员的效率,满足…

【C++类和对象】类和对象(中):构造函数 {六个默认成员函数;构造函数的概念及特性;编译器自动生成的构造函数;默认构造函数}

一、类的六个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器…