如何从 CSR 创建自签名代码签名证书?

2023-11-30

标题说明了一切。我能找到的所有文章要么是关于生成自签名 SSL 证书,要么是不考虑 CSR。我的要求很简单:生成一个自签名代码签名证书,我可以将其与 CSR 中的signtool.exe 一起使用以进行测试。


我希望这个问题是重复的,但我找不到简洁的答案,因此我将其作为一个更完整的问题提供,使用 OpenSSL 生成x509用于代码签名(或任何其他目的)的自签名证书。

Steps:

  1. 生成 CA(证书颁发机构)密钥
  2. 生成 x509 CA 证书(DER 编码)
  3. 创建 CSR(证书签名请求)模板
  4. 使用 CSR 模板生成 CSR
  5. 创建签名证书模板
  6. 生成 x509 签名证书和密钥对(DER 编码)
  7. (可选)将 DER 转换为 PKCS12 格式(Windows 需要此)
  8. (可选)查看您的作品

我将使用与真实组织没有任何关系的假公司(The Company Ltd)

See 维基百科有关 BER、DER 和 CER 格式的说明。注意 .cer 通常用作 DER 文件的文件扩展名 - Doh! 另请参阅维基百科关于 PKCS12 格式

1 - 生成 CA 密钥

openssl genrsa -des3 -out rootCA.key 4096

给根 CA 密钥一个密码,不要忘记!

2 - 创建 x509 CA 证书(DER 编码)

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt

输入详细信息:[示例]

  • 国家:[英国]
  • 省份:[英格兰]
  • 城市: [伦敦]
  • 机构:[有限公司]
  • 部门:[工程]
  • 通用名称:[有限公司-工程根证书]
  • email: [[电子邮件受保护]]

3 - 编辑 CSR 模板:code_sign_csr.conf

[ req ]
default_bits  = 2048      # RSA key size
encrypt_key   = yes       # Protect private key
default_md    = sha256    # MD to use
utf8          = yes       # Input is UTF-8
string_mask   = utf8only  # Emit UTF-8 strings
prompt        = yes       # Prompt for DN
distinguished_name = codesign_dn # DN template
req_extensions = codesign_reqext # Desired extensions

[ codesign_dn ]
commonName      = the-company.com
commonName_max  = 64

[ codesign_reqext ]
keyUsage        = critical,digitalSignature
extendedKeyUsage = critical,codeSigning
subjectKeyIdentifier = hash

4 - 使用模板生成 CSR

openssl req -new -newkey rsa:2048 -keyout testsign.key -sha256 -nodes -out testsign.csr -subj "/CN=The Company Engineering Code Sign Cert" -config code_sign_csr.conf

5 - 创建签名证书模板:code_sign_cert.conf

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = the-company.com

6 - 通过使用 CA 证书签署 CSR 来生成 x509 签名证书和密钥对

openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -in testsign.csr -out testsign.crt -days 365 -CAcreateserial -extfile code_sign_cert.conf

(5) 和 (6) 中的相同过程用于生成进一步的证书。

7 - (可选)将 x509 证书转换为 PKCS12

openssl pkcs12 -export -out testsign.p12 -inkey testsign.key -in testsign.crt
openssl pkcs12 -export -out rootCA.p12 -inkey rootCA.key -in rootCA.crt

8 - (可选)查看您的作品

openssl x509 -in testsign.crt -noout -text
openssl x509 -in rootCA.crt -noout -text

注意发行人和主题

现在将根 CA 证书提供给需要验证证书的客户端。 向服务器、代码作者、电子邮件发送者等提供根 CA 证书和生成的证书。

注释主题替代名称

  • 对于电子邮件签名,主题替代名称 (SAN) 必须与电子邮件匹配 地址
  • 对于 DNS 签名,它必须与域名匹配和/或包含通配符。
  • 对于服务器,它可以匹配 IP 地址和/或规范名称
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 CSR 创建自签名代码签名证书? 的相关文章

随机推荐

  • 提高axios获取下载速度

    我在用axios从 Azure 存储 Blob 下载文件 100MB axios method get url uri onDownloadProgress progressEvent gt console log Loaded progr
  • 使用tensorflow作为存储库构建基于tensorflow的android应用程序

    这就像来自的后续问题使用 Tensorflow 构建 Android 应用 我想将 android 示例项目与tensorflow git repo 分开 并能够使用tensorflow 作为依赖项单独构建它 这是我的文件夹结构 my pr
  • HTML5 Iframe:阻止远程请求

    我正在使用 srcdoc 属性将 HTML 内容加载到 iframe 中 iframe 是一个沙盒 iframe 没有授予任何权限 因此 iframe 中的所有 Javascript 都会被阻止 但是 远程请求 例如 CSS 图像等 仍然会
  • 如何使用 scanf 验证输入

    如何使用 scanf 验证用户输入 现在我有类似的东西 但不起作用 注意 我有 atoi 只是为了验证 scanf 验证是否有效 scanf 0987654321 s buf i atoi buf if i index i Using sc
  • 序列化为 JSON,属性名称中带有括号

    我正在使用 paypal api 来做一些付款的事情 如果我看设置快速结账某些字段的形式为PAYMENTREQUEST n AMT 这对我来说很好 因为我有一个像这样的请求类 public class SetExpressCheckoutR
  • Google Drive Realtime API OAuth2 刷新错误(第 3 部分)

    在笔记本电脑 手机从睡眠 待机状态恢复后 我在实时 API 正确重新连接方面遇到了一些问题 API 正确检测到它需要刷新 OAuth 令牌并引发错误 但是刷新令牌后 实时 API 无法正确重新连接到远程服务 这有点类似于 Part 2 但这
  • 使用 C 外部指针的 R 内存泄漏

    我试图在包中使用外部指针 但遇到了一个问题 似乎终结器没有被调用并且内存泄漏 下面是这个问题的一个极其人为的例子 include
  • 如何根据自定义规则对Excel项目进行分组?

    我有一组数据 网站管理员工具搜索查询 位于 Excel 中 具有以下标题 Query Impressions Clicks Date 谷歌电子表格示例here 我想添加一个名为的额外列Category并根据将在 A 列上搜索字符串的自定义规
  • 如何在动态数据透视表上显示最小值和最大值

    我从 dt table 连接与 dt k 创建了一个数据透视表 table dt k id k name k ott 1 item 1 ss 2 item 2 ss 3 item 3 ww 4 item 4 dd 5 item 5 asa
  • jQuery悬停功能超时

    我目前正在使用下面的代码 使用 jQuery 和悬停函数在用户将鼠标悬停在图像上时淡入 标题 元素 这在桌面浏览器上完美运行 但是当使用 iPad 等移动触摸设备进行测试时 需要用户点击图像来触发悬停功能 标题会按预期淡入 但保持活动状态
  • 将大字符串值设置为 CLOB 时抛出“PLS-00172:字符串文字太长”错误

    我有一个包含 CLOB 字段的存储过程 当我调用具有较大值 超过 33K 个字符 的存储过程时 出现错误 PLS 00172 字符串文字太长 我的存储过程 create or replace procedure P c clob is be
  • 如何在 Cloud Firestore 中使用文档 ID 执行集合组查询

    几天前 我将我的应用程序帖子从实时数据库移至云 Firestore 因为 Firestore 显然具有更灵活的查询 我一直在修改我的代码以使用 firestore 作为新数据库 现在我遇到了一个问题 如何检索 帖子 集合中具有包含特定命名文
  • 如何序列化控件

    我们有一个应用程序 其中包含 xml 文件形式的数据库 它具有客户端服务器架构 所以这里服务器将使用dataset从xml文件中读取数据并将其存储在xml模式中 然后服务器将序列化数据并将其传递给 UI 客户端 因此 UI 数据通过使用左侧
  • 如何使用 Ansible 在远程服务器上执行 shell 脚本?

    我计划使用 Ansible playbook 在远程服务器上执行 shell 脚本 空白test sh文件 touch test sh 剧本 name Transfer and execute a script hosts server u
  • Ember JS:如何导入 Material 组件 Web JS

    我正在尝试将 Material Components Web MDC Web 与 EmberJS 应用程序一起使用 我已经安装了material components web与纱线 yarn add material components
  • 贝宝创建定期配置文件,显示下一个付款日期与配置文件开始日期相同

    创建的定期贝宝配置文件显示的下一个付款日期与配置文件开始日期相同 我认为它应该显示到下个月的下一个付款日期 以下是我发送以创建配置文件的数组格式 Array 0 gt 1 gt AMT 9 99 2 gt CREDITCARDTYPE Vi
  • 用户控件的子依赖对象上的绑定不起作用

    我正在尝试让绑定在用户控件的子对象上工作 Xaml 看起来像这样
  • Azure DevOps 托管代理 - 将工具(PS 模块)添加到代理

    我想知道是否有一种简单的方法可以将额外的工具合并到默认的 Microsoft 托管代理池之一 特别是 VS2017 中 基本上 我想添加一些默认情况下未安装的额外 ARM powershell 模块 因为仅安装了核心模块集 即我希望利用一些
  • 查询以检查图中是否存在仅访问一次边的循环

    如何编写在我的图上运行的查询 如果没有路径仅穿过每个边一次并返回到起点 则输出 假 我正在使用以下示例图 g TinkerGraph open traversal g addV property id blue as b addV prop
  • 如何从 CSR 创建自签名代码签名证书?

    标题说明了一切 我能找到的所有文章要么是关于生成自签名 SSL 证书 要么是不考虑 CSR 我的要求很简单 生成一个自签名代码签名证书 我可以将其与 CSR 中的signtool exe 一起使用以进行测试 我希望这个问题是重复的 但我找不