使用 Pkcs10CertificationRequest 获取主题备用名称

2023-12-14

我目前能够解码 CSR 的值(请求的扩展除外),特别是X509v3 Subject Alternative Name。这是相关部分 我的“DecodeCSR(字符串 csr):

public void DecodeCsr(string csrStr){
//getting just csr
var csrChars = Regex.Replace(csrStr, @"-----[^-]+-----", "").Trim().Replace(" ", "").Replace(Environment.NewLine, "").ToCharArray();
//converting that string into a byte array
byte[] csrEncode = Convert.FromBase64CharArray(csrChars, 0, csrChars.Length);
//giving decodeCsr the byte array
Pkcs10CertificationRequest decodeCsr = new Pkcs10CertificationRequest(csrEncode);
//getting a string of subject information
string subject = decodeCsr.GetCertificationRequestInfo().Subject.ToString();
//here's how I'm getting a DerSet of attribute
DerSet atts = (DerSet)decodeCsr.GetCertificationRequestInfo().Attributes;
}

以下是 SAN 的测试 CSR:

string csr = "-----BEGIN CERTIFICATE REQUEST-----MIIC1DCCAbwCAQAwXjELMAkGA1UEBhMCVVMxEDAOBgNVBAgMB0dlb3JnaWExEDAOBgNVBAcMB0F0bGFudGExDTALBgNVBAoMBFRlc3QxHDAaBgNVBAMME3d3dy50aGlzaXNhdGVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFU4pXLB3d8csjvRIkIdZfUF2m9sijtk1bqYohqVwYr3+OyDRkfRuTCni8RJS9VOcl6n5aUiK27P4s5j9LqqfL0vS8B949P/ewb2ip2BGB1sEmxKcsEoZYNNEhMm9p7yNTAEqJ/WN0N1CpKBFV1J/w6xiQy5tUyUe7C9c8DX6K1uhEDF9pfeTaCNxYBShm0JFuAIqn6Z+RzbC7tdwc0KgN/bhx3bEvg8b0p/hgxd2veuUmB/fcIPsFawkGFPcQzLpSbc1Vb+zru40HAbRflyQckA3ZgRsa1OHsdiOyb8vpV7dUm4VHOm38bw2wVImRMfRtNZXrL/WiWcGadtFV8nxXAgMBAAGgMTAvBgkqhkiG9w0BCQ4xIjAgMB4GA1UdEQQXMBWCCHRlc3QuY29tggl0ZXN0Mi5jb20wDQYJKoZIhvcNAQELBQADggEBAKXxHlruiqtTwB1Ov17K+mz03EidfecdW+9u8gcLdOOLKn5kCg6RuC0mCjGHvFGjE6ljFc5cyUFbfdqzd8QXh1f3AgxveR+oq1wExJNr0Yl6kjVEdtndvHhSzUmZZ02EcPbIq/eY5KSTdKidjvIJMwTUtIyUQ71y/vSVn0YavvXYo/re57kC7chW/Ns/hZmHrZ6GvMWE9ea3P3jOKPyXCULJlbQCjXc6CQJAkBlcKpvnW6kU2PjreDWzRMhzqZzUqhc6RsGzz84/xwBsrYXfTj91FQd9+w15CYzBEJOv/Iz3CfVGb4s1+yUPVxgei2ezTjfQVcQgq4CusRnDU5/7lmE=-----END CERTIFICATE REQUEST-----";

我可以得到的信息decodeCsr.GetCertificationRequestInfo().Attributes is an Org.BouncyCastle.Asn1.DerSet看起来像这样:

DerSet atts = (DerSet)decodeCsr.GetCertificationRequestInfo().Attributes;

这是调试模式下的样子(下面是整个对象的图片):

atts    {[[1.2.840.113549.1.9.14, [[[2.5.29.17, #3026820a61757374696e2e636f6d820b61757374696e322e636f6d820b61757374696e342e636f6d]]]]]} Org.BouncyCastle.Asn1.DerSet

我可以看到DerOctetString处于调试模式,但是我不知道如何实现它。我相信,如果我能做到这一点,雨果的答案可能适用,有一个DerOctetStringParser但目前我没有什么可以给予的。

我尝试过治疗atts作为删除的字符串,OID 得到的值与DerOctetString在调试模式下并将其转换为DerOctetString那不起作用,而且我不认为这个答案可以很好地扩展。


我用下面的代码让它工作:

public static void DecodeCsr(string csr)
{
    csr = Regex.Replace(csr, @"-----[^-]+-----", String.Empty).Trim().Replace(" ", "").Replace(Environment.NewLine, "");

    PemObject pem = new PemObject("CSR", Convert.FromBase64String(csr));
    Pkcs10CertificationRequest request = new Pkcs10CertificationRequest(pem.Content);
    CertificationRequestInfo requestInfo = request.GetCertificationRequestInfo();

    // an Attribute is a collection of Sequence which contains a collection of Asn1Object
    // let's find the sequence that contains a DerObjectIdentifier with Id of "1.2.840.113549.1.9.14"
    DerSequence extensionSequence = requestInfo.Attributes.OfType<DerSequence>()
                                                          .First(o => o.OfType<DerObjectIdentifier>()
                                                                       .Any(oo => oo.Id == "1.2.840.113549.1.9.14"));

    // let's get the set of value for this sequence
    DerSet extensionSet = extensionSequence.OfType<DerSet>().First();

    // estensionSet = [[2.5.29.17, #30158208746573742e636f6d820974657374322e636f6d]]]
    // extensionSet contains nested sequence ... let's use a recursive method 
    DerOctetString str = GetAsn1ObjectRecursive<DerOctetString>(extensionSet.OfType<DerSequence>().First(), "2.5.29.17");

    GeneralNames names = GeneralNames.GetInstance(Asn1Object.FromByteArray(str.GetOctets()));
    Console.WriteLine(names.ToString());
}

static T GetAsn1ObjectRecursive<T>(DerSequence sequence, String id) where T : Asn1Object
{
    if (sequence.OfType<DerObjectIdentifier>().Any(o => o.Id == id))
    {
        return sequence.OfType<T>().First();
    }

    foreach (DerSequence subSequence in sequence.OfType<DerSequence>())
    {
        T value = GetAsn1ObjectRecursive<T>(subSequence, id);
        if (value != default(T))
        {
            return value;
        }
    }

    return default(T);
}

棘手的部分是充气城堡适用于任何地方的集合,并且请求的值位于嵌套的嵌套集合内。我使用递归函数,因为我不确定您的 CSR 是否始终具有嵌套的该值。

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

使用 Pkcs10CertificationRequest 获取主题备用名称 的相关文章

  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • 批量更新 SQL Server C#

    我有一个 270k 行的数据库 带有主键mid和一个名为value 我有一个包含中值和值的文本文件 现在我想更新表格 以便将每个值分配给正确的中间值 我当前的方法是从 C 读取文本文件 并为我读取的每一行更新表中的一行 必须有更快的方法来做
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • std::async 与重载函数

    可能的重复 std bind 重载解析 https stackoverflow com questions 4159487 stdbind overload resolution 考虑以下 C 示例 class A public int f
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • maven-cxf-codegen-plugin 使用 Jaxb 绑定为所有生成的类添加继承

    我正在使用 Apache CXF 的 cxf codegen plugin 将 wsdl 转换为 java 对象 我指定了一个绑定文件来添加额外的 jaxb 处理 我希望所有这些文件都从接口继承 或扩展抽象类 我的问题是 虽然我可以使用一个
  • 基于 Leaflet 和 AngularJS 的地图未正确加载

    我的基于 Leaflet 和 AngularJS 的地图无法正确加载 我不知道发生了什么 但地图图块没有按应有的方式布局 这是底图 这是我的代码 function setMapPosition scope center lat 51 505
  • 在shinyApp中使用R text2vec包和LDAvis的LDA主题模型

    以下是使用 R text2vec 包进行 LDA 主题建模的代码 library text2vec tokens docs text gt docs text a colection of text documents word token
  • 对 tsvector 中的每个元素使用 Levenshtein 函数?

    我正在尝试使用 Postgres 创建模糊搜索 并一直使用 django watson 作为基本搜索引擎来工作 我有一个名为 search tsv 的字段 它是一个 tsvector 其中包含我要搜索的模型的所有字段值 我想使用 Leven
  • 在网页中添加“导出到 Excel”按钮,以在 Web 应用程序中将 gridview 导出到 Excel

    我为诊所构建了一个患者管理软件 我需要将患者列表从 ASP net 网格视图导出到 Excel 文件 我的问题是 有没有办法将gridview导出到excel 我正在使用 vb net 和 Visual Web Developer 2010
  • 在 BeautifulSoup 中将一个标签替换为另一个标签

    我试图在 XML 文档中查找标签 并用新标签完全替换它 我认为下面应该有效 para monograph find para text Some text newpara
  • 如何在R中将减号从右移到左/从后到前?

    我已从文本文件导入数据 负数的形式为 100 右侧的减号 我应该将其转换为 100 任何想法 提前致谢 我们可以使用以下方法来做到这一点sub 我们将数字作为一个组来捕获 d 后面跟着一个 在最后 的字符串并替换为 接下来是反向引用 1 的
  • navigator.getusermedia

    我正在研究 html5 新规范 尤其是网络摄像头功能 By 按照本教程 我收到以下错误 Native web camera streaming getUserMedia is not supported in this browser 这是
  • 使用 Python OpenCV 删除图像的黑色标题部分

    我需要使用 Python CV 删除图像多个部分的黑色部分 我尝试过去噪 但没有给出令人满意的结果 例如 我需要删除表标题中的黑色部分 下图 并将标题背景转换为白色 内容为黑色 谁能帮助我选择正确的库或解决方案来克服这个问题 正如您所看到的
  • 在 Jetpack Compose 中创建垂直滑块

    我正在构建一个Android应用程序 需要在同一页面中创建多个垂直滑块用于音乐均衡器调整 但我只能从官方材料设计文档中找到水平滑块 我尝试从官方文档中实现默认滑块并使用修改器旋转它并且它可以工作 但问题是我现在无法使用调整高度Modifie
  • 如何设置 DJANGO_SETTINGS_MODULE 环境变量?

    我正在尝试修复在 django 应用程序中看到的一个不发送邮件的错误 请注意 该应用程序运行良好 只是邮件功能失败了 我尝试收集错误日志 但找不到与发送邮件相关的任何错误 所以 我做了一个例子来尝试强制错误 这是示例 from django
  • Windows 7 64 位上的 eslint-v8 Ruby gem 安装问题

    在 Windows 7 64 位 上设置 Rally App SDK 2 0p 环境时出现问题 我已经从 ruby installer org 安装了 Ruby 1 8 7 p358 并成功安装了 rake Ruby gem 但我安装时遇到
  • 使用 MediaStore 在 Android Q 中创建/复制文件

    我正在尝试找到一种方法 可以处理除媒体文件 图片 视频 音频 之外的任何文件的创建和复制 以便从 Android Q 内部存储中的一个位置复制到另一个位置 在此 我在应用程序文件夹中创建了我的文件我希望将它们移动到下载文件夹或我可以在内部存
  • iTextSharp 中的 PDF 坐标系

    现在我正在使用 iTextSharp 从 PDF 中提取线条和矩形 我使用的方法如下 PdfReader reader new PdfReader strPDFFileName var pageSize reader GetPageSize
  • 如何将 JSP 中的 ResultSet 对象发送回 HTML (JavaScript)?

    我有一个查询 MySQL 数据库的 JSP 页面 我想将 Resultset 对象作为响应对象发送到 HTML 页面 我需要结果集对象来填充表格和图表 如何将 resultSet 对象转换为 javascript 对象 如何将 result
  • 插入数据库问题...(错误字符编码)PHP/MYSQL

    我有一个提交到 mysql 数据库的表单 数据库设置为 UTF 8 GENERAL 并且行也使用相同的字符编码 但是 当我提交文本中带有 或 的表单时 它不会在这些字符之后提交任何内容 例如 这是美好的一天 它只是将其插入数据库 这是美好的
  • C 编程中读/写文本文件

    我需要将一些内容写入txt文件并读取内容 然后将它们打印在屏幕上 下面是我编写的代码 它可以正确创建内容并将内容写入文件 但无法从文件中读取并正确打印 include
  • Internet Explorer 中的 Google 地图 JavaScript API 错误

    我为 Google Maps JavaScript API v3 编写了一个非常简单的 jQuery 插件 它可以在 Firefox Chrome 等 中运行 但不能在 Internet Explorer 8 中运行 我收到的错误是以下行中
  • 从网站按钮运行 Chrome 应用程序

    我需要启动一个镀铬应用从网页按钮点击 我找到了以下资源 从 url 运行 Google Chrome 应用程序 从网页激活 Chrome 应用程序 如何通过 JavaScript 启动 Chrome 打包应用程序 这建议使用可外部连接 an
  • 使用 Pkcs10CertificationRequest 获取主题备用名称

    我目前能够解码 CSR 的值 请求的扩展除外 特别是X509v3 Subject Alternative Name 这是相关部分 我的 DecodeCSR 字符串 csr public void DecodeCsr string csrSt