windows和linux上证书的增删查

news/2024/9/18 12:23:22/

文章目录

    • 引言
    • 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.ppmy.cn/news/47981.html

相关文章

Java中的数学相关类

文章目录 1.java.lang.Math2.java.math包2.1 BigInteger2.2 BigDecimal2.3 java.util.Random 1.java.lang.Math java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具类,其所有方法均为静态方法&#…

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp实现Mono12和Mono16位深度的图像保存(C#)

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp实现Mono12和Mono16位深度的图像保存(C#) Baumer工业相机Baumer工业相机保存位深度12/16位图像的技术背景代码案例分享1:引用合适的类文件2:BGAPI SDK在图像回调中联合O…

4个实用JS库99%的人可能都不知道

前言 作为一名前端开发者,我通过这些JavaScript库大大提高了自己的效率,比如格式化日期、处理URL参数、调试手机网页等。因此,我想将这些好用的库分享给你们,也希望可以帮助到你们。 1.使用“Day.js”格式化日期和时间 地址&am…

【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)

0. 写在前面 常言道,科技论文犹如“八股文”,有固定的写作模式。本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理,并不是为了提高或者润色一篇论文的表达。基本上所有的论文,都需要先构思好一些点子,有…

自定义泛型,自定义泛型接口,自定义泛型方法,JUnit,

class 类名<T,R....>{成员}//...表示可以有多个泛型因义的为静态是和类相关的&#xff0c;在类加载时&#xff0c;对象还没有创建&#xff0c; 泛型是对象创建的时候定 所以&#xff0c;如果静态方法和静态属性使用了泛型&#xff0c;JVM就无法完成初始化注意事项 packag…

paddlepaddle 的 CPU 和 GPU

想记录一下一个 bug 改了一上午改到最后发现并没有 bug 的 bug。 总结&#xff1a; 因为下午要跑很久&#xff0c;为了省 GPU 算力&#xff0c;我想上午先用 CPU 把数据处理部分跑出来&#xff08;感觉数据处理部分不像网络训练那样涉及太多计算&#xff0c;所以感觉用 CPU 就…

【定制功能】LVGL 邮件日志功能

更多源码分析请访问:LVGL 源码分析大全 目录 1、基本说明2、配置方法3、APIs3.1、xs_send_email_log1、基本说明 邮件日志功能是为了方便定位客户问题的方案。在使用此功能时,需要保证网络连接是正常的。 内存使用 日志功能使用的内存不超过 9K: 数据缓存(4096) + 消息缓存…

JDBC入门数据库连接

1. JDBC入门 JDBC&#xff08;Java Database Connectivity&#xff09;是Java程序与数据库进行交互的一种标准接口&#xff0c;它提供了一种简单的方式来连接和操作数据库。在使用JDBC之前&#xff0c;需要先了解以下几个概念&#xff1a; JDBC Driver&#xff1a;JDBC驱动程…

D. Marcin and Training Camp(思维 + 判断一个数二进制位是否是另一个数的子集)

Problem - D - Codeforces 马辛是他大学里的一名教练。有N个学生想参加训练营。马辛是个聪明的教练&#xff0c;所以他只想派那些能冷静合作的学生参加。 让我们关注一下这些学生。每个学生可以用两个整数ai和bi来描述&#xff1b;bi等于第i个学生的技能水平&#xff08;越高越…

十二、详解Kubernetes存储卷的技术原理

Kubernetes存储卷是Kubernetes中用于持久化存储数据的一种抽象概念。它们允许容器在不同的Pod之间共享数据,并且可以在Pod重新调度或迁移时保留数据。本文将详细介绍Kubernetes存储卷的原理。 1.存储卷的概念 Kubernetes存储卷是为了解决容器化环境下数据持久化的问题而引入…

linux_FIFO命名管道-mkfifo函数-进程通信

接上一篇&#xff1a;linux_管道学习-pipe函数-管道的读写-fpathconf函数 本次来分享FIFO命名管道&#xff0c;一些常识&#xff0c;开始上菜&#xff1a; 1.FIFO-mkfifo函数 FIFO常被称为命名管道&#xff0c;以区分管道(pipe)。管道(pipe)只能用于“有血缘关系”的进程间。…

第三章 法的渊源与法的分类

目录 第一节 法的渊源的分类 一、法的渊源释义二、法的渊源种类 第二节 正式法源 一、正式法源的含义二、当代中国的正式法源三、正式法源的一般效力原则 第三节 非正式法源 一、当代中国的非正式法源 第四节 法的分类 一、法的一般分类二、法的特殊分类 第一节 法的渊源的…

Spring AOP核心概念与操作示例

AOP 核心概念 还记得我们Spring有两个核心的概念嘛&#xff1f;一个是IOC/DI&#xff0c;另一个是AOP咯。 先来认识两个概念&#xff1a; AOP(Aspect Oriented Programming)面向切面编程&#xff1b;作用&#xff1a;在不惊动原始设计的基础上为其进行功能增强&#xff0c;类…

Spring Security 05 密码加密

目录 DelegatingPasswordEncoder 使用 PasswordEncoder 密码加密实战 密码自动升级 实际密码比较是由PasswordEncoder完成的&#xff0c;因此只需要使用PasswordEncoder 不同实现就可以实现不同方式加密。 public interface PasswordEncoder {// 进行明文加密String encod…

AI大模型加速RPAxAI时代到来,谁会是RPA领域的杀手级应用?

GPT等AI大模型震撼来袭&#xff0c;基于RPA的超级自动化仍是最佳落地载体 对话弘玑CPO贾岿&#xff0c;深入了解国产RPA厂商对AI大模型的探索与实践 文/王吉伟 关于RPA已死的说法&#xff0c;在中国RPA元年&#xff08;2019年&#xff09;投资机构疯狂抢项目之时就已经有了。…

西北乱跑娃 -- centos7安装python3.8最全教程

Centos7安装Python3.8详细教程 安装编译相关工具 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel yum install …

java 内置锁

java 内置锁 1.java内置锁是一个互斥锁&#xff0c;也就说明最多只有一个线程能够获得该锁&#xff0c;当线程A获得锁时&#xff0c;线程B想要尝试获得锁的时候&#xff0c;必须等线程A释放锁&#xff0c;若线程A一直不释放锁&#xff0c;则线程B一直等待处于阻塞状态中。获取…

Java锁的区别:独占模式与共享模式

目录 前言&#xff1a; Java 独占模式的锁有哪些&#xff1f; 共享模式的锁有哪些&#xff1f; Java即是 独占模式又是共享模式的锁有哪些&#xff1f; 前言&#xff1a; 资源有两种共享模式&#xff0c;或者说两种同步⽅式&#xff1a; 独占模式&#xff08;Exclusive&am…

类图(类之间的关系)

一.概述 类图(Class diagram)是显示了模型的静态结构&#xff0c;特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。在软件工程中&#xff0c;类图是一种静态的结构图&#xff0c;描述了系统的类的集合…

MySQL调优笔记——慢SQL优化记录(2)

今天调优的原因是&#xff0c;有一个统计报表业务&#xff0c;查询的时间太慢&#xff1b;同时由于数据库的压力是随机性的&#xff0c;这个业务的执行下限和上限相差近20倍&#xff1b;快的时候可以达到600ms&#xff0c;慢的时候有9秒之多&#xff1b; 接下来详细介绍&#x…