从字符串加载.Net中的Jira公共证书(如何将ASN.1编码的SubjectPublicKeyInfo转换为.Net中的X509证书)

2024-01-02

我正在构建一个 oauth 1.0a 服务,该服务将由 Jira 中的小工具使用,它是一个用 C# 编写的 .Net 3.5 应用程序。

Jira 使用 RSA-SHA1 签名方法向此服务发出请求,这意味着要验证请求的签名,我需要从其公共证书创建一个 X509Certificate 实例。

在 Jira 应用程序中,您可以通过转到消费者信息屏幕(其中还有 Jira 等的消费者密钥)来获取公共证书,并且它以以下格式显示公共密钥:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCObJRTGSZbAo
jRkvKmm0cwFXnKcPMfR4t/sghvLe/+QVs6TJOz5cUh5UokSqyz
VeMsL0jomP18ZcR3SPcIFT7xtOGQjLwLk7ghfYSsxjTGs9VxsC
/PQk5OQRP3v43IxFNF3M2SYhFWJZTOnqrab5AsMh2Kxdv+D69D
CINXCu5ltQIDAQAB

查看生成此密钥的 Jira 代码,我可以看到它(据说)是 PEM 编码的,没有 BEGIN/END 证书页眉/页脚。

RSAKeys.toPemEncoding(consumer.getPublicKey())

RSAKeys 是一个开源类,可以在这里找到:

https://studio.atlassian.com/source/browse/OAUTH/trunk/api/src/main/java/com/atlassian/oauth/util/RSAKeys.java?r=HEAD https://studio.atlassian.com/source/browse/OAUTH/trunk/api/src/main/java/com/atlassian/oauth/util/RSAKeys.java?r=HEAD

我希望将此公共证书(密钥)加载到 .Net 内的 X509Certificate 实例中,但到目前为止我的尝试失败了。这是我的代码:

static readonly Regex stripRegex = new Regex("-----[A-Z ]*-----");

public string ConvertFromOpenSsl(string key)
{
    return stripRegex.Replace(key, "").Replace("\r", "").Replace("\n", "");
}

public X509Certificate2 GetConsumerCertificate(IConsumer consumer)
{
    string cert =               
    @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCObJRTGSZbAo
    jRkvKmm0cwFXnKcPMfR4t/sghvLe/+QVs6TJOz5cUh5UokSqyz
    VeMsL0jomP18ZcR3SPcIFT7xtOGQjLwLk7ghfYSsxjTGs9VxsC
    /PQk5OQRP3v43IxFNF3M2SYhFWJZTOnqrab5AsMh2Kxdv+D69D
    CINXCu5ltQIDAQAB";

    string converted = ConvertFromOpenSsl(cert);

    var bytes = Convert.FromBase64String(converted);


    var cert = new X509Certificate2(bytes); // throws here

但在最后一行代码中我抛出了一个异常:

System.Security.Cryptography.CryptographicException: Cannot find the requested object.

    at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
    at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte[] rawData)
    at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
    at System.Security.Cryptography.X509Certificates.X509Certificate..ctor(Byte[] data)
    at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData) 

我很确定我错过了一些基本的东西,但我可以想到它是什么。

UPDATE

好的,经过进一步调查,发现这是公钥的 subjectPublicKeyInfo 序列化,因此它是 ASN.1、base 64 编码(未编码的 162 字节),这是 Java 使用 java.security.PublicKey.getEncoded() 的默认输出。

因此,考虑到所有这些 - 是否有任何简单的方法来创建包装此公钥的 X509Certificate2 实例 - 或者除了公钥之外是否还需要其他元数据来创建 x509Certificate2 实例?


Jira 应该为您提供证书(而不仅仅是公钥)。

通常,Java 世界会提供 Base64 编码或 PEM 证书。来自.Net的X509Certificate2可以自动加载base64、PEM或二进制证书。

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

从字符串加载.Net中的Jira公共证书(如何将ASN.1编码的SubjectPublicKeyInfo转换为.Net中的X509证书) 的相关文章

  • 如何修改s_client的代码?

    我正在玩apps s client c in the openssl源代码 我想进行一些更改并运行它 但是在保存文件并执行操作后 我的更改没有得到反映make all or a make 例如 我改变了sc usage函数为此 BIO pr
  • 内存数据库不保存数据

    我有一个简单的网络应用程序 在客户端有 Angular 在服务器端有 ASP NET Core Web API 我使用内存数据库 services AddDbContext
  • 不会将字符串转换为十进制 C#(输入字符串的格式不正确。)

    Visual Studio 不会将我的字符串转换为十进制 错误 输入字符串的格式不正确 Code string test 123 95 decimal test1 decimal parse test string being an int
  • 使用 opencv warpPerspective() 生成道路的自上而下视图

    我正在尝试实施逆透视映射计算与道路上另一辆车的距离 我知道在应用该函数之前我需要生成一个包含源点和目标点的变换矩阵warpPerspective 但我不知道如何计算目的地点 我在这个论坛和其他网站中搜索 但无法将第一张图片转换为第二张图片
  • 就地修改 XML 文件?

    假设我有以下 XML 文件
  • Cgo 生成的源无法在 MVC 上编译

    我有一个用 CGo 制作的共享库 它在 Linux 和 Android 上链接得很好 但是 当使用 Microsoft Visual Studio 2017 在 Windows 10 上进行编译时 出现以下错误 Microsoft R Pr
  • 软件预取手动指令合理的场景

    我读过有关 x86 和 x86 64 Intel 的内容gcc提供特殊的预取指令 include
  • 在 C++ 中从 std::string 转换为 char *

    我正在使用 VS2012 C 我需要将 std string 转换为 char 但我在网上找不到任何材料来提供有关如何执行此操作的任何指导 任何代码示例和建议将不胜感激 Use std string bla bla char blaptr
  • 移动构造函数和 std::move 混淆

    我正在阅读有关std move http en cppreference com w cpp utility move 移动构造函数和移动赋值运算符 说实话 我现在得到的只是困惑 现在我有一堂课 class A public int key
  • Python:如何使用 struct.pack_into 将不同类型的数据打包到字符串缓冲区中

    我正在尝试将一些无符号 int 数据打包到使用创建的字符串缓冲区中ctypes create string buffer 这是以下代码段 以及显示错误的运行示例在键盘上 http codepad org S8nUWMcW import st
  • 在 C# 中使用 VB6 字符串数组

    我有 旧的 VB6 代码 我想从 C 代码中使用它 这有点类似于这个问题 https stackoverflow com questions 23507416 passing string array from vb6 to c net 但
  • 宏和后置增量

    这是一些更奇怪的宏观行为 我希望有人能够阐明 define MAX a b a gt b a b void main void int a 3 b 4 printf d d d n a b MAX a b 输出为 4 6 5 b 的值增加两
  • 如何根据 xml 节点的值将子对象反序列化为父对象列表(例如 List)?

    我有一个名为 VehicleInfo xml 的 XML 文件 我想反序列化车辆列表中的 VehicleInfo 现在我有一个名为 Vehicle 的基类和三个名为 Car Bike Truck 的派生类 如何根据 xml 中的 Vehic
  • 字符串数组初始化

    这是另一个的延续question https stackoverflow com questions 7834294 string array conversion I have 考虑以下代码 char hi hello char arra
  • 无法在 UWP 中调试 .NET Standard 2.0 DLL

    我创建了一个新的 Xamarin Forms 解决方案 升级了所有 NuGet 确保 UWP 版本的目标版本为 16299 并确保 NET Standard 项目的目标版本为 2 0 我运行了该项目并能够很好地调试 NET Standard
  • 如何使用 C# 从 Kafka 获取主题列表

    我想从卡夫卡获取主题列表 我正在使用 kafka net 客户端 但无法在有关获取主题列表的文档中找到 您可以使用 Confluence Kafka 包中提供的 AdminClient 列出所有主题 using Confluent Kafk
  • 在 C 中使用 fgets 和 strcmp [重复]

    这个问题在这里已经有答案了 我试图从用户那里获取字符串输入 然后根据他们输入的输入运行不同的函数 例如 假设我问 你最喜欢的水果是什么 我希望程序根据他们输入的内容进行评论 我不知道该怎么做 这是我到目前为止所拥有的 include
  • 将 XML 反序列化为对象数组

    我正在尝试将 XML 文件反序列化为对象数组 但收到空对象 我的问题看起来与此类似 如何将 xml 反序列化为对象数组 https stackoverflow com questions 7541899 how to deserialize
  • typeof() 表达式内的副作用

    在 GNUC C 中 您可以使用typeof expression 并且使用内部带有副作用的表达式是合法的 例如 您可以使用以下 C 代码 int x 0 typeof x y 在这种情况下 副作用被忽略 并且 x 之后仍然为零 这是有道理
  • 为什么 # 后面跟一个数字在 C plus plus 中似乎没有任何作用

    重现步骤 将以下行插入到 C 源代码的任意行中 1234 任何行 包括第一行 最后一行 甚至你也可以像这样在函数头和函数体之间输入 int foo 1234 return 0 数字可以很长 我测试了170多个字符 如果添加任何非数字字符 则

随机推荐

  • Powershell / VSTS 构建 - 独立存储凭据/与用户运行脚本无关

    我正在尝试为构建创建一个脚本 用于签出文件 编辑文件并将其重新签入 我希望它在作为开发人员或构建代理运行时能够工作 我有一个类似的解决方案this https stackoverflow com a 25455769 852806 密码存储
  • 将大型本地数据库与服务器数据库同步(MySQL)

    我需要每周将大型 3GB 40 表 本地 MySQL 数据库同步到服务器数据库 这两个数据库完全相同 本地数据库不断更新 大约每周服务器数据库都需要使用本地数据更新 您可以将其称为 镜像数据库 或 主 主 但我不确定这是否正确 目前数据库仅
  • 编辑 swf 文件中的动作脚本

    我已经尝试了 10 个小时来编辑这个 swf 文件 它看起来与反编译器中的预期完全一样 但是当我将其导出到闪存时 它是一个空白画布 并且我无法访问操作脚本 我想做的只是在动作脚本中编辑一些东西 我什至不碰电影 有没有更简单的方法来做到这一点
  • Android Studio,logcat 在应用程序关闭后清理

    自从 Android Studio 更新 1 2 Beta 以来 我的 logcat 遇到了问题 当我运行我的应用程序时 它会像平常一样记录所有内容 然后我的应用程序崩溃了 应用程序说 不幸的是 游戏已停止 几秒钟后 Android 会关闭
  • 使用 Jquery 更改页面标题

    如何进行动态变化
  • trac-admin /path/to/myproject initenv

    我的 Trac 有问题 我无法创建新项目 在这里 在 path to myproject 中 我应该写什么来代替它 事实上 我的项目路径是 C Users Programmer BitNami Trac Stack 项目 每次它在 BitN
  • C# 析构函数的使用示例

    我正在阅读有关 C 中的析构函数的内容 但我无法为其找到合适的用例 有人可以提供一个用法示例并进行解释吗 非常非常感谢 Update书中的代码示例实现了 Destructor 和 Dispose 方法 请参阅书中的代码片段 class My
  • Pandas 按索引计数分组和排序

    假设我有这个数据框 d Path abc abc ghi ghi jkl jkl Detail foo bar bar foo foo foo Program prog1 prog1 prog1 prog2 prog3 prog3 Valu
  • Spark union 因嵌套 JSON 数据帧而失败

    我有以下两个 JSON 文件 name Agent1 age 32 details d1 1 d2 2 name Agent2 age 42 details 我带着火花读了它们 val jsonDf1 spark read json pat
  • GWT + Google 地图 API v3

    我的 GWT 项目中需要 Google Maps API v3 调用 更具体地说 是 Google 地图和 DirectionServices 等地点的自动完成功能 我们已经尝试了 2 种方法来获取 v3 访问权限 但没有一种方法令人满意
  • 在 .NET 正则表达式中,将零宽度正前瞻断言与其他搜索项相结合

    我需要解析一个具有多行标题 任意数量的多行详细信息和多行页脚的文件 每个细节都以一个模式开始 页脚也以一个模式开始 假设每个细节都以 detail 开头 页脚以 footer 开头 我可以通过以下方式成功找到每个细节 s detail de
  • 内插弧度角?

    如果给定的起始角度为 1 0f 结束角度为 6 0f 那么我真正想要插值的不是 1 和 6 之间的 5 而是较小的部分 这将导致逆时针插补 插值时如何考虑这一点 本质上 当给定从 0 到 6 283 的 2 个弧度角时 我如何知道是否应该根
  • 调试时编辑 C#

    我知道我以前处理过这个问题 但覆盖这个问题的设置似乎总是在变化 我在 Visual Studio 2008 中有一个 C 项目 当我调试时 VS 不允许我编辑代码 我不想编辑并继续 我只想为我的下一个版本进行更改 编辑并继续被禁用 当我在调
  • gSOAP 中的动态数组以 C++ 方式使用 STL 向量而不是 __ptr/__size?

    我正在使用 gSOAP 2 8 8 开发 Web 服务 我想发送自定义数据类型的无界序列 我可以通过以下方式实现这个gSOAP 用户指南第 11 11 节 http www cs fsu edu engelen soapdoc2 html
  • WPF:一个文本框,按下 Enter 键时会触发一个事件

    而不是附加一个PreviewKeyUp事件与每个TextBox在我的应用程序中 检查按下的键是否是 Enter 键 然后执行操作 我决定实现一个扩展版本TextBox其中包括一个 DefaultAction 事件 该事件在按下 Enter
  • CSS ul li 子弹消失[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的网页中
  • 如何在Android上为Room库设置混淆规则

    在我的应用程序中我想使用Room使用库database 最后为生成APK我启用minify选项 proguard in Build Gradle 我使用以下版本的 Room 库 implementation android arch per
  • CodeIgniter:所有 $this->db->query() 方法调用的 SQL 审计?

    我正在使用 CodeIgniter 2 并且想要审核所有 this gt db gt query sql calls 我们所有的数据库调用都是通过 query 方法 没有活动记录使用情况 我需要记录 sql 查询并将它们输入到自定义表中以用
  • WPF 惯用手与弹出窗口

    我刚刚将我的电脑从 Windows 7 迁移到 Windows 8 在运行我们的 WPF 应用程序时 我注意到我们的 WPF 弹出窗口和 或工具提示现在默认位于左下角 而不是正常的右下角 有人注意到这一点吗 我知道您可以在 xaml 中的每
  • 从字符串加载.Net中的Jira公共证书(如何将ASN.1编码的SubjectPublicKeyInfo转换为.Net中的X509证书)

    我正在构建一个 oauth 1 0a 服务 该服务将由 Jira 中的小工具使用 它是一个用 C 编写的 Net 3 5 应用程序 Jira 使用 RSA SHA1 签名方法向此服务发出请求 这意味着要验证请求的签名 我需要从其公共证书创建