来自 x509 证书的 golang 主题 dn

2023-11-21

有没有简单的方法可以从 go 中的 x509 证书中以字符串形式获取完整的主题 DN(或颁发者 DN)?

我无法在 pkix.Name 中找到任何类似“.String()”的方法


解决方案(感谢同事):

var oid = map[string]string{
    "2.5.4.3":                    "CN",
    "2.5.4.4":                    "SN",
    "2.5.4.5":                    "serialNumber",
    "2.5.4.6":                    "C",
    "2.5.4.7":                    "L",
    "2.5.4.8":                    "ST",
    "2.5.4.9":                    "streetAddress",
    "2.5.4.10":                   "O",
    "2.5.4.11":                   "OU",
    "2.5.4.12":                   "title",
    "2.5.4.17":                   "postalCode",
    "2.5.4.42":                   "GN",
    "2.5.4.43":                   "initials",
    "2.5.4.44":                   "generationQualifier",
    "2.5.4.46":                   "dnQualifier",
    "2.5.4.65":                   "pseudonym",
    "0.9.2342.19200300.100.1.25": "DC",
    "1.2.840.113549.1.9.1":       "emailAddress",
    "0.9.2342.19200300.100.1.1":  "userid",
}

func getDNFromCert(namespace pkix.Name, sep string) (string, error) {
    subject := []string{}
    for _, s := range namespace.ToRDNSequence() {
        for _, i := range s {
            if v, ok := i.Value.(string); ok {
                if name, ok := oid[i.Type.String()]; ok {
                    // <oid name>=<value>
                    subject = append(subject, fmt.Sprintf("%s=%s", name, v))
                } else {
                    // <oid>=<value> if no <oid name> is found
                    subject = append(subject, fmt.Sprintf("%s=%s", i.Type.String(), v))
                }
            } else {
                // <oid>=<value in default format> if value is not string
                subject = append(subject, fmt.Sprintf("%s=%v", i.Type.String, v))
            }
        }
    }
    return sep + strings.Join(subject, sep), nil
}

调用函数:

subj, err := getDNFromCert(x509Cert.Subject, "/")
if err != nil {
   // do error handling
}
fmt.Println(subj)

输出(示例):

/C=US/O=some organization/OU=unit/CN=common name

这似乎是唯一“简单”的解决方案

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

来自 x509 证书的 golang 主题 dn 的相关文章

随机推荐

  • 任务数据流,数据块可以从完成状态更改吗?

    我想知道是否可以改变数据块的完成状态 例如 我标记了一个var block new BufferBlock
  • 使用 Numpy 在 Python 中对浮点数进行舍入误差

    我遇到了一个问题 我认为这与使用浮点数和精度有关 但我不太熟悉所涉及的各种复杂问题 我是一个数学家 在我看来 我可能还只是在黑板上处理小数 我将开始研究这一点 但与此同时 我想知道是否有任何使用浮点数的通用技术可以解决我将在下面概述的问题
  • 包依赖

    我有一个巨大的 Java 应用程序 其中包含许多包 这些包中的某些类依赖于其他包中的类 给定一个类 我想知道它的所有依赖类 反之亦然 GUI 工具应该非常有帮助 There s 这里描述了一些有用的工具用于 免费 Eclipse IDE 还
  • 关闭应用程序的计时器

    如何在 C 中制作一个强制应用程序在指定时间关闭的计时器 我有这样的事情 void myTimer Elapsed object sender System Timers ElapsedEventArgs e if counter 120
  • Flutter 如何使用 AssetBundle 存储和访问文件

    EDIT 这个问题是关于使用 AssetBundle 的 而那个问题 flutter 中的文件列表 是关于使用目录 因为阶级不同 所以他们也不同 另外 我删除了一个部分 这可能与上一个问题类似 假设您有一张图像clock png在资产 图像
  • Python 3,将存储二进制数据的字符串转换为 Int

    我有等于 0b11001010 的变量 Number 我希望它是 int 类型 就像存储普通二进制文件一样 例如0b11001010 Number 0b11001010 NewNumber 0b11001010 有没有一种非常简单的方法而我
  • Symfony2 中的重定向和阻止缓存

    我正在这样做 domain com route name do something 1 它设置一个 cookie 然后使用 302 重定向重定向到此 domain com route name 无论页面查看如何 它都允许执行操作 cooki
  • 如果 PHP 页面上的 MySQL 连接持续不关闭会发生什么?

    在每个 PHP 页面的开头 我打开与 MySQL 的连接 在整个页面中使用它 并在页面末尾关闭它 但是 我经常在页面中间重定向到另一个页面 因此在这些情况下连接不会关闭 我知道这对 Web 服务器的性能来说并不坏 因为 PHP 无论如何都会
  • 结构的快速序列化/反序列化

    我有大量的地理数据 以仅由结构组成的简单对象结构表示 我的所有字段都是值类型 public struct Child readonly float X readonly float Y readonly int myField public
  • Bootstrap popover.toggle() 仅显示

    我正在尝试集成 twitter bootstrap popover 我被迫使用 javascript API 因为一些动态元素是通过 Ajax 加载的 也应该做出反应 基本上 这是一个应该做出反应的示例标签 a href class pop
  • 在运行时扫描Java注释

    如何在整个类路径中搜索带注释的类 我正在创建一个库 并且希望允许用户注释他们的类 因此当 Web 应用程序启动时 我需要扫描整个类路径以查找某些注释 我正在考虑 Java EE 5 Web 服务或 EJB 的新功能 您用以下方式注释您的课程
  • 如何重载 JavaScript 对象的运算符相等

    我已经使用 Dojo declare 创建了新对象 如何重载对象的运算符 你不能超载 but 有一个隐含的 toString 打电话 所以无论如何 toString 回报将让你有效地超载 有点 function foo foo protot
  • 如何让类中的方法调用另一个方法?

    现在我有两节课allmethods cs and caller cs 我在课堂上有一些方法allmethods cs 我想写代码caller cs为了调用某个方法allmethods class 代码示例 public class allm
  • 使用 PDFBOX API 创建新的 PDF 文档

    我需要创建一个 PDF 其中包含执行状态报告 其中状态将采用表结构 是否可以使用 PDFBOX api 生成 pdf 表格格式 以下是创建新 PDF 文档的一些示例代码 import java awt Color import java i
  • 有什么方法可以使用 mongoose 从 mongodb 批量操作中获取修改后的 IDS?

    let dbOperations Edge collection initializeOrderedBulkOp edges forEach edge gt dbOperations find id edge id upsert updat
  • 什么是 href=javascript:;

    在我正在浏览的代码中 有一个链接有 href javascript 在代码中 单击它时 它会打开一个灯箱以显示一些带有关闭按钮的消息 它是如何完成的 我认为这使用了 dojo 代码 a href a 实际上什么也不做 一般来说 这个 Not
  • ng-disabled 无法使用引导按钮

    我正在使用 bootstrap js 和 Angular js 我的代码如下 few lines from controller scope isWaiting true scope promise http get voluumHandl
  • Rails:模型中未定义的方法“截断”

    我的模型中有以下方法可以裁剪记录的描述 但由于未知原因 截断方法不起作用 def cropped description nb words max 500 if description length gt nb words max trun
  • 如何检测驱动器中是否有软盘?

    我尝试使用 DriveInfo IsReady 但如果驱动器中有未格式化的软盘 它会返回 false 您始终可以尝试从软盘读取扇区 看看是否成功 我不知道如何在 NET 中执行此操作 但这里是 C C 等效项 SetLastError 0
  • 来自 x509 证书的 golang 主题 dn

    有没有简单的方法可以从 go 中的 x509 证书中以字符串形式获取完整的主题 DN 或颁发者 DN 我无法在 pkix Name 中找到任何类似 String 的方法 解决方案 感谢同事 var oid map string string