自建CA实战之 《0x03 代码签名》

自建CA实战之 《0x03 代码签名》

本文针对Windows平台,介绍如何使用自建CA来签发代码签名证书。

之前的文章中,我们介绍了如何自建CA,以及如何使用自建CA来签发Web服务器证书、客户端证书。

本文将介绍如何使用自建CA来签发代码签名证书。用于给程序签名。

代码签名的好处是:

  • 证明程序的作者是谁。
  • 证明程序没有被篡改过,没有被木马病毒感染过,凡是修改过一个字节,都会导致签名验证失败。

创建支持代码签名的证书

来源 选项卡中选择我们创建的CA。

在这里插入图片描述

主体选项卡中按需填写,就不再细说了。

在这里插入图片描述

扩展选项卡中,选择代码签名(Code Signing),下图中多选了Microsoft Individual Code SigningMicrosoft Commercial Code Signing,这两个选项是为了兼容性考虑,如果只是给自己的程序签名,可以只选Code Signing即可。

文末对这三个选项有比较详细的说明。

在这里插入图片描述

与上一章节导出客户端证书一样,这里我们导出格式选择pfx,然后设置密码。

在这里插入图片描述

使用代码签名证书签名程序

Windows代码签名工具下载

https://raw.githubusercontent.com/taills/tools/master/SignTool.zip

无法直接点击下载的,可以到仓库中下载。

https://github.com/taills/tools

我们把导出的证书文件拷贝到桌面,以及把我们要签名的程序拷贝到桌面。

注意:这里证书**不用双击打开导入!**因为我们要使用命令行工具来签名程序。

我们这里使用的是记事本(notepad.exe)程序,当然你也可以使用其他程序。

cd C:\Users\Administrator\Desktop
xcopy C:\Windows\System32\notepad.exe .

我们查看记事本程序的属性,发现它并没有签名。
在这里插入图片描述

我们使用signtool工具来给记事本程序签名。

Microsoft Windows [版本 10.0.19044.1288]
(c) Microsoft Corporation。保留所有权利。

C:\Users\admin>cd Desktop

C:\Users\admin\Desktop>xcopy C:\Windows\System32\notepad.exe .
C:\Windows\System32\notepad.exe
复制了 1 个文件

C:\Users\admin\Desktop>SignTool\signtool.exe sign /f CodeSigning-WeiPang.pfx /p 12345678 notepad.exe
Done Adding Additional Store
Successfully signed: notepad.exe

C:\Users\admin\Desktop>

在这里插入图片描述

我们再次查看记事本程序的属性,发现它已经被签名了。但是时间戳显示不可用,这是因为我们没有使用时间戳服务器,所以时间戳显示不可用。我们再次增加一个参数/t http://timestamp.digicert.com,使用时间戳服务器来签名。

C:\Users\admin\Desktop>SignTool\signtool.exe sign /f CodeSigning-WeiPang.pfx /p 12345678 /t http://timestamp.digicert.com notepad.exe
Done Adding Additional Store
Successfully signed: notepad.exe

再次查看属性,发现时间戳显示正常了。

在这里插入图片描述

总结

命令行签名的命令格式如下:

signtool sign /f 证书文件 /p 证书密码 /t 时间戳服务器 要签名的程序

三项代码签名证书的异同

  1. 证书类型:

    • Microsoft Individual Code Signing(个人代码签名)证书:适用于个人开发者或个人使用的代码签名证书。
    • Microsoft Commercial Code Signing(商业代码签名)证书:适用于商业实体或组织使用的代码签名证书。
    • 普通的Code Signing证书:这是一个更通用的术语,指的是由各种证书颁发机构(如Symantec、Comodo、DigiCert等)颁发的代码签名证书。
  2. 证书颁发机构:

    • Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书由Microsoft自己的证书颁发机构颁发。
    • 普通的Code Signing证书由各种证书颁发机构颁发,不限于Microsoft。
  3. 应用范围:

    • Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书主要用于Microsoft平台(如Windows操作系统、Office等)上的代码签名。
    • 普通的Code Signing证书可以用于多个平台,包括Windows、macOS、Linux等。
  4. 验证和信任:

    • Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书在Microsoft平台上享有更高的信任级别,因为它们由Microsoft颁发。
    • 普通的Code Signing证书的信任级别取决于颁发机构的声誉和受信任的根证书列表。
  5. 价格和购买渠道:

    • Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书通常具有较高的价格,并且只能通过Microsoft的官方渠道购买。
    • 普通的Code Signing证书的价格和购买渠道因证书颁发机构而异,通常有更多的选择。

总的来说,Microsoft Individual Code Signing和Microsoft Commercial Code Signing证书是专为Microsoft平台开发者和商业实体设计的,享有更高的信任级别,但价格较高且适用范围有限。普通的Code Signing证书则更通用,可以适用于多个平台,但信任级别可能因颁发机构的声誉而异。选择适合自己需求的证书时,可以考虑具体的使用场景、平台要求和预算等因素。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉树算法—后继节点

与其明天开始,不如现在行动! 文章目录 1 后继节点1.1 解题思路1.2 代码实现 💎总结 1 后继节点 1.1 解题思路 二叉树节点结构定义如下: public static class Node { public int cal; public Node left; public Node right; public…

【C++初阶】STL之学习string的用法

目录 前言:一、认识下string1.1 什么是string1.2 为什么要有string 二、string 类的接口使用2.1 初始化与析构2.1.1 初始化2.1.2 析构 2.2 容量操作2.2.1 长度大小——size和length2.2.2 空间总大小——capacity2.2.3 判空——empty2.2.4 清空——clear2.2.5 预留空…

C语言之内存函数

C语言之内存函数 文章目录 C语言之内存函数1. memcpy 使⽤和模拟实现1.1 memcpy 函数的使用1.3 memcpy的模拟实现 2. memmove 使⽤和模拟实现2.1 memmove 函数的使用2.2 memmove的模拟实现 3. memset 函数的使用4. memcmp 函数的使⽤ 1. memcpy 使⽤和模拟实现 函数声明如下&a…

【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

video标签在h5中被劫持问题

将video的视频链接转为blob export const encryptionVideo (options: URL) > {return new Promise((resolve, reject) > {window.URL window.URL || window.webkitURL;var xhr new XMLHttpRequest();xhr.open(GET, options.url, true);xhr.responseType blob;xhr.onl…

Windows 7隐藏用户测试

请注意Window 7是在虚拟机上安装的,ip是192.168.0.108。 下边都是在虚拟机Window 7上操作,直到最后远程连接才在自己本机Windows 11上操作。 需要同时按下Windowsr,然后输入cmd,再点击确定。 在命令上里边输入net user可以显示一下用户。 …

Unity阻止射线穿透UI的方法之一

if(UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) return; 作者:StormerZ https://www.bilibili.com/read/cv27797873/ 出处:bilibili

Qt 样式表

QLabel,应用于Widget: .QLabel {background-color:pink; }.QLabel[warnlevel_1] {border:5px solid yellow; }.QLabel[warnlevel_2] {border:5px solid red; } QWidget{background-color:rgb(54,54,54); }QLineEdit{border: 1px solid #ABCDA0; /…

8 增强型脉宽调制模块ePWM

文章目录 8.1 PWM控制基本原理8.2 PWM结构及组成单位8.3 时基模块TB8.3.1 ePWM时基模块作用8.3.2 时基模块的关键信号和寄存器 8.5 动作模块 AC8.5.1 动作模块的作用8.5.2 动作模块关键信号与寄存器 8.11 PWM模块输出8.11.1 单边非对称波形8.11.2 单边非对称脉冲波形 8.1 PWM控…

Less 安装教程

文章目录 前言LESS的系统要求安装LESS例子输出Less编译css工具后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Sass和Less 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板…

kafka的设计原理

文章目录 1 Kafka简介2 Kafka的架构2.1 Kafka 一些重要概念2.2 工作流程2.3 副本原理2.4 分区和主题的关系2.5 生产者2.5.1 分区可以水平扩展2.5.2 分区策略 2.6 消费者2.6.1 消费方式2.6.2 分区分配策略 2.7 数据可靠性保证2.7.1 副本数据同步策略2.7.2 ACK 应答机制2.7.3 可靠…

C++ libcxxabi中dynamic_cast 实现

摘要:最近在看一个崩溃的过程中详细看了一遍cxxabi的定义,就想着看一些llvm中cxxabi的一些实现。本文描述了cxxabi中dynamic_cast的实现以及原理。   关键字:cxxabi,dynamic_cast 1 简介 C中,dynamic_cast用于有虚函数的继承链…

监控同一局域网内其它主机上网访问信息

1.先取得网关IP 2.安装IPTABLES路由表 sudo apt-get install iptables 3.启用IP转发 sudo sysctl -p 查看配置是否生效 4.配置路由 iptables -t nat -A POSTROUTING -j MASQUERADE 配置成功后,使用sudo iptables-save查看

Android获取原始图片Bitmap的宽高大小尺寸,Kotlin

Android获取原始图片Bitmap的宽高大小尺寸,Kotlin val options BitmapFactory.Options()options.inJustDecodeBounds trueval decodeBmp BitmapFactory.decodeResource(resources, R.mipmap.p1, options)//此时,decode出来的decodeBmp宽高并不是原始图…

Linux 中的 ls 命令使用教程

目录 前言 如何运用 ls 命令 1、列出带有所有权的文件和目录 2、获取以人类可读的方式显示的信息 3、列出隐藏文件 4、递归列出文件 5、在使用 ls 时对文件和目录做区分 6、列出指定扩展名的文件 7、基于大小对输出内容排序 8、根据日期和时间排序文件 让我们来总结…

【PyQt】(自定义类)阴影遮罩-升级版

这是之前发的代码(自定义类)阴影遮罩的升级版。 升级就升级在,优化了对非矩形控件的遮盖效果,例如圆角按钮,以及默认方法不满足时可以传入其他的遮盖方法。 自定义阴影遮罩Mask: class Mask(QWidget):__excludeNone__colorNonecl…

【中间件】消息队列中间件intro

中间件middleware 内容管理 introwhy use MQMQ实现漫谈主流消息队列QMQ IntroQMQ架构QMQ 存储模型 本文还是从理论层面分析消息队列中间件 cfeng现在处于理论分析阶段,以中间件例子,之前的blog对于中间件是从使用角度分享了相关的用法,现在就…

带你用uniapp从零开发一个仿小米商场_9. 轮播图组件封装及使用

导航栏有了,接下来就是轮播图了,轮播图如下, 因为uniapp 官方自己有轮播图,所以这里就不自己写了,直接使用uniapp的轮播图二次开发就好 uniapp的轮播图组件叫swiper ,感兴趣的朋友可以点击链接,直接去看官方文档,也可以看我这里实操 用hbuilderX编译uniapp的代码有一个好处…

FO-like Transformation

参考文献: [RS91] Rackoff C, Simon D R. Non-interactive zero-knowledge proof of knowledge and chosen ciphertext attack[C]//Annual international cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 1991: 433-444.[BR93] Bellare M…

枚举的第一行

2023年11月26日 问题: 好奇enum的所声明的枚举类的第一行是什么 从java技术卷1中第五章5.6中,了解是枚举类的实例 验证 错误信息: 解释: 此时只有有参构造 在这个枚举类里不能使用空,大概意思是说不能使用空参创建实例 校验 在原有的基础上创建一个无参构造 结果:不再报错,第…