为什么“openssl pkcs12 -in keystore.p12 -out client-certificate.pem -clcerts -nokeys”需要 -nokeys

2024-01-28

我正在使用 openssl 生成客户端证书和密钥,稍后将在与 cUrl 的相互身份验证中使用它们。

我正在使用以下命令来生成客户端证书。

openssl pkcs12 -in keystore.p12 -out client-certificate.pem -clcerts -nokeys

根据文档 https://www.openssl.org/docs/man1.0.2/apps/pkcs12.html:

-clcerts 只输出客户端证书。

我的问题是因为-clcerts is only output client certificates为什么我们需要把nokeys再次?谢谢


一行的用法并不完整,手册页也好不到哪儿去。

-clcerts and -cacerts真正的意思是:在输入中的证书中,仅当它们分别具有或不具有 LocalKeyID 时,才将它们包含在输出中,LocalKeyID 通常用于 EE 证书而不是 CA 证书(见下文)。这两者对私钥没有影响,私钥仅由-nokeys(以及与加密任何输出密钥相关的选项),所以-clcerts没有-nokeys将输出私钥和 with-LocalKeyID 证书,但不会输出任何 without-LocalKeyID 证书。由于这里的文件名为client-certificate这可能是不希望的;如果是的话,文件应该命名为client-key-and-cert.

(补充)详细:X.509 https://en.wikipedia.org/wiki/X.509 PKI https://en.wikipedia.org/wiki/Public_key_infrastructure架构定义了两个概念上不同的类别: 使用公钥密码学 https://en.wikipedia.org/wiki/Public-key_cryptography对于有用的东西,例如互联网通信、电子邮件或消息、程序或固件签名、护照等政府文件等,并且需要证书才能这样做;证书颁发机构 (CA),它们共同受到信任,并且确实向 EE 及其自身颁发证书。如今,EE 证书不是由根(受信任)CA 直接颁发的,除了在有限的组织环境(或测试平台)中,EE 证书是由“中间”或“下级”CA 颁发的,这些 CA 拥有自己的证书通过根或通过更高级别的中间体,可能在到达根之前重复。 (实际上,1 中间是最常见的,2 是相当常见的,更多的是罕见但可能的。)要在此系统中安全地使用公钥,您需要 EE 证书及其上方(所有)中间 CA 的证书到,但不一定包括,根或“[信任]锚”,它形成一个“链”或“路径” https://www.rfc-editor.org/rfc/rfc5280#section-3.2那可以是已验证 https://www.rfc-editor.org/rfc/rfc5280#section-6.

EE 和 CA 证书是usually区别于基本约束扩展 https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.9密钥使用扩展 https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.3- 但不总是; PKIX 标准甚至不适用于所有 Internet 应用程序,更不用说外部应用程序了,而且即使在适用的地方,它们也并不总是得到完全遵守。 X.509 证书处理的许多实现最初是在 20 世纪 90 年代创建的,早于该标准的 v3 添加了扩展,并且在没有它们的情况下仍然可以运行。任何状况之下openssl pkcs12不使用此信息。

(EE)owner证书的证书通常需要匹配的私钥以及需要提供给依赖方(发送者、接收者、用户等)的“链”证书。 PKCS12(最初是 PFX)文件格式主要是为了处理这个问题而设计的;按照惯例PKCS12 文件包含私钥和匹配的证书,以及任何所需的链证书。然而,该规范更加灵活,并且可以存储私钥、证书以及有时其他信息的几乎任意组合。然而,一个约定是,当存在私钥和匹配的证书时,两者都由本地密钥ID属性 https://www.rfc-editor.org/rfc/rfc2985#page-18具有相同的值。放入文件中的与私钥不匹配的证书(通常但不一定是链证书)不具有此属性。

因此,在正常情况下,PKCS12 包含一个 EE 密钥和一个证书加链 (CA) 证书,或者不太常见的情况是几对 EE 密钥和所有证书加链 (CA) 证书,-clcerts选择 EE 证书(即使许多 EE 不是客户)并且-cacerts选择 CA 证书。但是,如果您有包含私钥和匹配证书的 PKCS12for a CA and its链证书(更高级别的 CA),这是完全合理的,-clcerts选择与私钥匹配的 CA 证书并-cacerts选择otherCA 证书。如果您有一个包含与私钥不匹配的“额外”证书的 PKCS12,-cacerts选择它(它们),即使它(它们)实际上是 EE 证书(并且-clcerts才不是);例如,当您直接信任 EE 时,Java 会对信任库文件执行此操作,例如沟通同行。如果埃里克将这些选项拼写为类似的内容,可能会更清楚-owner-certs and -other-certs,但要改变这一点已经晚了 25 年。

PS:此命令不会生成任何内容。 PKCS12 已经包含私钥和证书,此命令只是将它们提取为不同的(可能更有用)的形式。无论您为生成密钥和证书所做的事情都是在此之前完成的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“openssl pkcs12 -in keystore.p12 -out client-certificate.pem -clcerts -nokeys”需要 -nokeys 的相关文章

随机推荐

  • 同时播放多个音轨并进行同步

    最近我在 Audacity 有一个音频项目 其中有多个曲目 它有分开的人声和分开的乐器 我已将每个曲目导出为 WAV 16 位 文件 我有 5 个文件 5 个曲目 所有文件都超过300MB 长度为25分钟 我试图使用媒体播放器同时播放它们
  • 使用Python创建只读pdf文件

    是否有任何 python 模块可以使用它来创建新的 pdf 文件或修改仅具有读取权限的现有 pdf 文件 我想禁用 pdf 文件的 另存为 和 另存为其他格式 DRM 的东西 我不确定这是否可移植 但您可以使用 os chmod impor
  • 如何创建像android google chrome tab一样的android listview

    我需要像这张图片一样创建列表视图 列表视图项目像谷歌浏览器选项卡一样相互重叠 我可以向上或向下移动列表视图项目 任何人都可以告诉我一个好的建议或告诉我示例我应该如何做到这一点 Thanks 你需要一个 iOS 存折风格的组件 比如卡钱包视图
  • 在 Android Eclipse 上设置多个模拟器

    我正在为我的 Android 应用程序运行性能测试 想知道是否可以在 Eclipse 中同时运行多个模拟器 如果是 我该怎么做 创建多个模拟器 更改android项目运行配置 目标为手动选择而不是自动 右键单击 android 项目 gt
  • 将 pandas crosstab 数据框更改为纯表格式:

    我通过以下 pandas 交叉表获得了聚合数据框 但是 我想要这样的列格式 id ymdh A11 A12 A15 A16 如何将原始数据框更改为我想要的格式 Original output dataframe df pd crosstab
  • 使用 LoginView 触发 UpdatePanel 内的按钮

    我有一个 UpdatePanel 里面有一个 LoginView 现在 在 AnonymousTemplate 里面我有一个按钮 btnLogin 问题是触发器标签看不到该按钮 这是代码
  • Invoke-RestMethod 错误:无法发送正文类型

    我正在尝试使用 Invoke RestMethod 从 Freshdesk 获取门票 我收到的错误是 Invoke RestMethod 无法发送具有此动词类型的内容正文 我的函数如下所示 function opentickets Body
  • django-rest-framework POST 上的“此字段是必需的”

    每当我发布到 django rest framework DRF 端点时 我都会不断收到 HTTP 400 Bad Request offeror organization This field is required 回复 但是 考虑到下
  • 将 ActivityGroup 应用程序转换为使用 Fragments/FragmentGroup

    我有一个应用程序 我迫切需要从使用旧的 ActivityGroup 类转换为 Fragments 但我不知道该怎么做 下面是我现在使用的代码示例 谁能提供一些关于我应该采取哪些步骤来开始将其切换为使用 Fragments FragmentM
  • 鼠标按钮按下过多

    我想只要按住鼠标右键即可放大某个对象 现在的问题是我每次想要缩放时都必须单击它 有没有办法可以修改我的代码 以便在按住按钮而不是单击按钮时它会缩放 void mouse int button int state int x int y Sa
  • 通过 Maven/TeamCity 运行 IntelliJ 检查

    我有一个 Maven 项目 我正在尝试配置 TeamCity 来运行IntelliJ 的检查 http confluence jetbrains net display TCD6 Inspections on it TeamCity 的文档
  • 如何在 AngularJS 中使用动态模板创建指令?

    如何使用动态模板创建指令 use strict app directive ngFormField function compile return transclude true scope label template
  • App Engine 和 Google Drive API

    我已经使用应用程序引擎工作了几个星期 现在我正在尝试做一些新的事情 我想显示用户最新 25 个文档的列表 但我不知道该怎么做 有人能给我一些信息吗 我有一个应用程序设置 1 可以使用Google Drive API 2 用户必须登录才能使用
  • 插入 C# MongoDB 中的嵌套数组

    我有以下内容document在一个名为的集合中Users在 MongoDB 中 我正在尝试插入一个
  • 通过正确定义索引列表来提高代码效率

    我问了这个问题通过重新构建 if 语句 do 循环来避免重复代码 https stackoverflow com questions 53289143 avoid duplicating code by re structuring if
  • Selenium 3.0 ExpectedConditions 问题

    Using a click 实现如下 selenium 的行为就像单击了按钮一样 并期待下一个屏幕 但网页不会收到点击 因此不会弹出下一个屏幕 我不太明白这是怎么回事 也许有些人以前遇到过这个问题 点击实现如下 public static
  • 检查 Oracle 中是否存在行的最快查询?

    我正在使用 Oracle 并且有一个非常大的表 我需要检查是否存在满足一些简单标准的任何行 使用简单的 SQL 来解决此问题的最佳方法是什么 这是我最好的猜测 虽然对于我的目的来说它可能足够快 但我很想学习一种规范的方法来基本上实现 SQL
  • 包 org.apache.axis2 不存在

    我正在尝试导入包 import org apache axis2 context ConfigurationContext import org apache axis2 description AxisService import org
  • zend框架中的Zend_form_element_select onchange

    我有一个名为 createDevice php 的表单 class Admin Form CreateDevice extends Zend Form public function init this gt setName Create
  • 为什么“openssl pkcs12 -in keystore.p12 -out client-certificate.pem -clcerts -nokeys”需要 -nokeys

    我正在使用 openssl 生成客户端证书和密钥 稍后将在与 cUrl 的相互身份验证中使用它们 我正在使用以下命令来生成客户端证书 openssl pkcs12 in keystore p12 out client certificate