为什么 Symantec CSR 检查程序认为我的 CSR 在 AlgorithmIdentifier 中缺少 NULL 值? RFC3279

2024-03-28

由于许多令人不快的原因,我一直在尝试使用 bouncycastle API 手动构建自己的证书签名请求。

表面上,我选择这样做是因为我需要 CSR 的预签名版本,以便使用存储在 HSM 中并在 LMK 下加密的密钥生成 sha256withRSA 签名,因此在创建 CSR 时无法立即使用。

无论如何,这在这一点上是偶然的。

我通过与使用 openSSL 生成的其他 CSR 进行比较,成功创建了一个 CSR 结构,向其中添加所需的信息,将其发送到 HSM 以使用私钥生成签名,取回该签名,然后将其附加到 CSR 。

然后,我将生成的证书粘贴到几个 CSR 检查器中,特别是赛门铁克的检查器,因为我相信,我们的 CA 必须对此进行签名。

赛门铁克 CSR 检查员自信地告诉我:

CSR 的 AlgorithmIdentifier 参数中缺少 NULL 值

Hmm. Ok.

然后它给出了一个好的例子:

下面是我将这个特定的 NULL 值添加到 AlgorithmIdentifier 对象中的代码:

    ASN1EncodableVector topLevelPublicKeySequenceVector = new ASN1EncodableVector();
    ASN1EncodableVector publicKeySequenceVector = new ASN1EncodableVector();
    AlgorithmIdentifier rsaEncryptionOid = new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE);      

    ASN1Integer pkModulus = new ASN1Integer(publicKey.getModulus());
    ASN1Integer pkExponent = new ASN1Integer(publicKey.getPublicExponent());
    publicKeySequenceVector.add(pkModulus);
    publicKeySequenceVector.add(pkExponent);
    DERSequence publicKeySequence = new DERSequence(publicKeySequenceVector);
    DERBitString publicKeyBitString = null;
    try {
        publicKeyBitString = new DERBitString(publicKeySequence);
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    topLevelPublicKeySequenceVector.add(rsaEncryptionOid);
    topLevelPublicKeySequenceVector.add(publicKeyBitString);

    DERSequence topLevelPublicKeySequence = new DERSequence(topLevelPublicKeySequenceVector);

因此,如果我将 CSR 放入 ASN.1 解码器中,查看这个 AlgorithmIdentifier 参数并验证它确实缺少这个 NULL 值,我会得到以下输出(包含虚假值,以便于StackOverflow),它显示我的 NULL 值似乎就在那里,我期望它在哪里:

SEQUENCE(3 elem)
   SEQUENCE(3 elem)
   INTEGER 0
   SEQUENCE(7 elem)
      SET(1 elem)
         SEQUENCE(2 elem)
            OBJECT IDENTIFIER 2.5.4.6 countryName (X.520 DN component)
            PrintableString GB
      SET(1 elem)
         SEQUENCE(2 elem)
            OBJECT IDENTIFIER 2.5.4.8 stateOrProvinceName (X.520 DN component)
            UTF8String Sol
      SET(1 elem)
         SEQUENCE(2 elem)
            OBJECT IDENTIFIER 2.5.4.7 localityName (X.520 DN component)
            UTF8String Earth
      SET(1 elem)
         SEQUENCE(2 elem)
            OBJECT IDENTIFIER 2.5.4.10 organizationName (X.520 DN component)
            UTF8String Stackoverflow
      SET(1 elem)
         SEQUENCE(2 elem)
            OBJECT IDENTIFIER 2.5.4.11 organizationalUnitName (X.520 DN component)
            UTF8String Stackoverflow
      SET(1 elem)
         SEQUENCE(2 elem)
            OBJECT IDENTIFIER 2.5.4.3 commonName (X.520 DN component)
            UTF8String common.name.for.stackoverflow
      SET(1 elem)
         SEQUENCE(2 elem)
         OBJECT IDENTIFIER 1.2.840.113549.1.9.1 emailAddress (PKCS #9)
         IA5String [email protected] /cdn-cgi/l/email-protection
   SEQUENCE(2 elem)
      SEQUENCE(2 elem)
         OBJECT IDENTIFIER 1.2.840.113549.1.1.1 rsaEncryption (PKCS #1)
         NULL
      BIT STRING(1 elem)
         SEQUENCE(2 elem)
            INTEGER(2048 bit) 231457529965blahblahetc
            INTEGER65537
   SEQUENCE(2 elem)
      OBJECT IDENTIFIER 1.2.840.113549.1.1.11 sha256WithRSAEncryption (PKCS #1)
      NULL
   BIT STRING(2048 bit) 1011010etc etc...

因此,对于我所描述的稍微迂回的方式表示歉意,是否有人知道为什么我的 CSR 无法对缺失字段进行验证,也就是说,它看起来并不真正缺失?

编辑: 这是实际的请求(或者至少是我使用具有相同症状的无意义值生成的请求,出于本问题的目的)

-----BEGIN CERTIFICATE REQUEST-----
MIIC6zCCAdMCAQAwgaUxCzAJBgNVBAYTAkdCMQwwCgYDVQQIDANTb2wxDjAMBgNV
BAcMBUVhcnRoMRYwFAYDVQQKDA1TdGFja292ZXJmbG93MRYwFAYDVQQLDA1TdGFj
a292ZXJmbG93MRgwFgYDVQQDDA93d3cuZXhhbXBsZS5jb20xLjAsBgkqhkiG9w0B
CQEWH2R1ZmYudmFsdWVAZm9yc3RhY2tvdmVyZmxvdy5jb20wggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAoIBAQDrH2qNz5wtTc9jFQPoTfdk1Mf9N1LGXrqyV5sA
1w9Y4BGGJNm3yW0KUPLxyHhSJLWzHqdKzcLwlocSJvYVrMmBG9agOnHhX1aQLrnr
ruEAP7aN/gHW9isQLk6/MJPt8TkIby6azR0qq4VYR/+6dRCv7PhVvGBMxWjdQbEa
UxJAyq3eVMNBMdDdrOIMLrvxF3xcido4O9qWtdXFQwUgXoUGJG0sY3tXpwE5jB7A
1MWayfbSXj2NATU9fqHhwEoPwBm4yw65Hg+VDHWABCR/qYmLQKrVThF9UE4RUy5I
+DMRoTOUX3YRqZkg3aaCfe/LtuoHhfsCSZwxak2GZ1TI8vWBAgMBAAGgADANBgkq
hkiG9w0BAQsFAAOCAQEAoqTYzypOlLKSrF4+5jKqbRgC+9JBUhYKmQcAIaDzmDNf
0ZHwxG4iGeCS5pj60MKpv6gxUZcLhwgcm717XZrMMR4dD9yILyJsFp7C8MnOgYpB
C/VzSBwH8FvmnVsSmOcAR8IcvXLW2BpTgH6tSiFsU+xlpUWUUceFL97xZAiM93cZ
tdsH6KbKo/YvCbKhGkX311S+oTPk1oSvu5znRXBl2iyk3wbFiC9blARIcfYlhGPH
gL/ic+7+Mn5qmOY8w39Y42aP/G4ISG8h52Q1pbxH7B/I++sK73yTwRZCf1tprMP6
27j3Bpr72VY1Egge97rrb8KcL+K+A84/74Ad7NNywQ==
-----END CERTIFICATE REQUEST-----

错误信息完全错误。应该说 PKCS#10 请求签名验证失败:)

尝试使用生成 PKCS#10 请求openssl https://wiki.openssl.org/index.php/Manual:Req(1)//certreq https://technet.microsoft.com/en-us/library/dn296456(v=ws.11).aspx并将签名算法oid的值更改为其他值。

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

为什么 Symantec CSR 检查程序认为我的 CSR 在 AlgorithmIdentifier 中缺少 NULL 值? RFC3279 的相关文章

  • 我是否需要安装 SQLite 才能使 SQLiteJDBC 正常工作?

    我想我只是没有 明白 如果我的计算机上尚未安装 SQLite 并且我想编写一个使用嵌入式数据库的 Java 应用程序 并且我将 SQLiteJDBC JAR 下载 导入到我的项目中 那么这就是我所需要的吗 或者 我是否需要先安装 SQLit
  • 带路径压缩算法的加权 Quick-Union

    有一种 带路径压缩的加权快速联合 算法 代码 public class WeightedQU private int id private int iz public WeightedQU int N id new int N iz new
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • 使用 Tabula 通过 Python 读取 pdf 时出现 Java 错误

    我已经安装了 tabula 库 用于使用 python 将 pdf 读取到 pandas 数据框中 但是当我运行代码时 import tabula df tabula read pdf sample1 pdf pages 1 我得到了例外
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • 如何在 JavaFX 中连接可观察列表?

    我所说的串联是指获得一个新列表 该列表侦听所有串联部分的更改 方法的目的是什么FXCollections concat ObservableList
  • Java 的支持向量机?

    我想用Java编写一个 智能监视器 它可以随时发出警报detects即将到来的性能问题 我的 Java 应用程序正在以结构化格式将数据写入日志文件
  • 什么是抽象类? [复制]

    这个问题在这里已经有答案了 当我了解抽象类时 我说 WT H 问题 创建一个无法实例化的类有什么意义呢 为什么有人想要这样的课程 什么情况下需要抽象类 如果你明白我的意思 最常见的是用作基类或接口 某些语言有单独的interface构建 有
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • 如何使用 JMagick 转换色彩空间?

    如何使用 JMagick API 转换色彩空间 例如 CMYK gt RGB 和 RGB gt CMYK None
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 在 Spring 上下文中查找方法级自定义注释

    我想知道的是 所有的类 方法Spring http en wikipedia org wiki Spring Framework注释为 Versioned的bean 我创建了自定义注释 Target ElementType METHOD E
  • Android S8+ 警告消息“不支持当前的显示尺寸设置,可能会出现意外行为”

    我在 Samsung S8 Android 7 中收到此警告消息 APP NAME 不支持当前的显示尺寸设置 可能会 行为出乎意料 它意味着什么以及如何删除它 谢谢 通过添加解决supports screens 机器人 xlargeScre
  • Java 正则表达式中的逻辑 AND

    是否可以在 Java Regex 中实现逻辑 AND 如果答案是肯定的 那么如何实现呢 正则表达式中的逻辑 AND 由一系列堆叠的先行断言组成 例如 foo bar glarch 将匹配包含所有三个 foo bar 和 glarch 的任何
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho

随机推荐

  • 注释正则表达式

    我正在尝试在 JavaScript 中注释正则表达式 似乎有很多关于如何remove使用正则表达式的代码注释 但实际上不是如何commentJavaScript 中的正则表达式因此更容易理解 不幸的是 JavaScript 没有像其他语言那
  • 当缓冲区有未保存的更改且未命名时退出 vim?

    我在 vim 中创建了一个空白的 临时缓冲区 即不与特定文件关联 方法是使用 vnew 然后我玩了一些文本 现在我只想退出编辑器 不保留这个 临时缓冲区 的内容 当我输入命令时 q Vim 给我 No Name E37 No write s
  • 如何增加 Angular UI Bootstrap 中的模式宽度?

    我正在创建一个模式 var modal modal open templateUrl partials welcome controller welcomeCtrl backdrop static scope scope 有没有办法增加它的
  • 如何在vuejs中的输入文本中添加禁用属性?

    我有2个网址 register register sponsor 4 The register路线会给我一个干净的输入文本 我可以在其中输入所有内容第二条路由将带来相同的输入 但其值为 4 并且已禁用 因此用户无法修改它 我设法使用 vue
  • Mapbox GL JS:将基础层设置为白色?

    我想显示带有白色背景的 Mapbox GL JS 地图 而不是地图背景 这是我现在的代码 mapboxgl accessToken mytoken var map new mapboxgl Map container map style m
  • 每分钟有多少个请求被视为“重负载”? (近似)

    人们经常在他们的 优化和性能相关 问题和答案中谈论 重负载 我试图在典型服务器上的常规 Web 应用程序的上下文中 以 SO 及其相当小的基础设施为例 以每分钟的请求数来量化这一点 假设它们立即返回 以简化并获取数据库速度 等式之外 我正在
  • Android 自定义 EditText 在 ICS 中不显示光标

    我的应用程序中有一个 EditText 它仅接收来自我放置在屏幕上的按钮的输入 为了避免出现软键盘 我有一个自定义的 EditText 类 如下所示 public class CustomEditText extends EditText
  • “不为空”和“不为空”有什么区别

    SELECT id FROM customers WHERE type IS NOT Null Versus SELECT id FROM customers WHERE NOT type IS NULL 上述任何一个返回的数据都将完全相同
  • sp_getapplock 无事务

    我正在实现内部没有事务的存储过程 事实上 它会 但仅限于特定地点 以将时间减少到最少 存储过程的本质是我一次只想运行一个 我尝试使用 sp getapplock 但很快发现它需要在事务内部 是否有其他选择可以在整个过程上锁定但不将其包装到事
  • 没有为类型“QuerySnapshot”定义 getter“文档”

    尝试从 Firestore 实时数据库访问数据 但我一直收到此消息和其他几条消息 在这种情况下我该如何访问数据 先感谢您 class HomePage extends StatefulWidget override HomePageStat
  • 如何在不单击表单的情况下触发表单上的默认按钮(winforms)?

    我有两个文本框 一个用于登录 ID 另一个用于密码 并且有一个按钮 提交 我需要一个获取登录 ID 和密码值的事件 即 无需单击鼠标 我需要调用此事件 只需按键盘上的 输入 即可 有谁能够帮助我 提前致谢 斯里尼 将按钮设置为表单上的接受按
  • 格式化 NumPy 数组

    我要这个 SP 1 2 3 1 1 000000e 00 2 000000e 00 3 000000e 00 2 1 630000e 01 1 990000e 01 1 840000e 01 3 1 630000e 01 1 990000e
  • 带有运行时构造函数参数的键控委托工厂?

    假设我有以下服务和组件 public interface IService void DoWork public class ServiceA IService private readonly string name public Ser
  • Laravel - 填充数据库中缺失的日期和计数

    我需要根据我收到的日期发送每个日期的观看次数 request 从控制器中的查询中 我获取了如下所示的图表数据 time 2016 05 01 count 2 time 2016 05 02 count 3 time 2016 05 03 c
  • const 键和非 const 键有什么区别?

    下面两行有什么区别 map
  • 使用 Cordova 插件拍摄全景图像?

    是否可以使用某些 cordova 插件 在 X 轴和 Y 轴 拍摄全景图像 感谢您的任何建议 相机插件启动设备的相机应用程序 所以我想在带有全景相机应用程序的手机上 您可以从科尔多瓦应用程序中拍摄全景图 用户必须手动选择该功能 否则你必须要
  • C# .NET 应用程序设置和升级

    我使用 Settings Default MySettingName 和 Settings Default Save 来保存和加载设置 当我更改版本号时 如何从旧版本获取设置并将其应用到新版本 我只是不太明白 Settings Upgrad
  • 使用 JavaScript 显示/隐藏图像

    我有一个 HTML 页面 其中包含一个通过 CSS 设置为不可见的图像visibility hidden 我想创建一个名为 显示图像 的链接 这样当我单击它时 就会出现图像 现在 我不知道如何建立这样的链接 因为通常与 a href 链接到
  • ChatBot 在 Web 模拟器中无法运行,但在本地 Bot Framework 模拟器中运行良好

    我开发了与 SharePoint On Premise 集成的 ChatBot 当我在模拟器中调试 ChatBot 时 它可以工作 但是 当我使用 DirectLine 在 Azure 中的 Web 模拟器和公司网站托管的网站上进行调试时
  • 为什么 Symantec CSR 检查程序认为我的 CSR 在 AlgorithmIdentifier 中缺少 NULL 值? RFC3279

    由于许多令人不快的原因 我一直在尝试使用 bouncycastle API 手动构建自己的证书签名请求 表面上 我选择这样做是因为我需要 CSR 的预签名版本 以便使用存储在 HSM 中并在 LMK 下加密的密钥生成 sha256withR