例如,说我想用任意或不推荐的扩展名(例如nsCertType)对证书进行签名: https ://www.openssl.org/docs/manmaster/man5/x509v3_config.html

我相信我应该按照以下内容将任意扩展名添加为证书的一部分,但是如何/在何处发现asn1对象标识符? 我已经阅读了今天想接纳的更多文档,但仍然感到困惑。

tmpl := &x509.Certificate{
    SerialNumber:          big.NewInt(time.Now().Unix()*1000),
    Subject:               pkix.Name{CommonName: "edgeproxy", Organization: []string{"edgeproxy"}},
    NotBefore:             now,
    NotAfter:              now.Add(caMaxAge),
    ExtraExtensions:       []pkix.Extension{
        {
            Id: asn1.ObjectIdentifier{}, //what goes here
            Critical: false,
            []byte("sslCA"),
        },
    },
    ExtKeyUsage:           []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth,x509.ExtKeyUsageClientAuth,x509.ExtKeyUsageEmailProtection, x509.ExtKeyUsageTimeStamping, x509.ExtKeyUsageMicrosoftCommercialCodeSigning, x509.ExtKeyUsageMicrosoftServerGatedCrypto, x509.ExtKeyUsageNetscapeServerGatedCrypto} ,
    KeyUsage:              x509.KeyUsageCRLSign | x509.KeyUsageCertSign,
    IsCA:                  true,
    BasicConstraintsValid: true,
}

在python中,我会这样做,但不知道如何将其移植到go中(这是我一天结束时所做的事情):

    OpenSSL.crypto.X509Extension(
        b"nsCertType",
        False,
        b"sslCA"
    ), 

#1楼 票数:1 已采纳

前往https://golang.org/src/encoding/asn1/asn1.go上的源进行定义:

// An ObjectIdentifier represents an ASN.1 OBJECT IDENTIFIER.

type ObjectIdentifier []int

因此,对象标识符(简称OID)是整数数组。 asn1模块具有解析它们的方法,例如parseObjectIdentifier

这是您需要放在Id:属性后面的结构。

但是现在您需要找出所需的OID。

虽然难以阅读,但OpenSSL源代码可以向您显示X.400 / X.500 / X.509世界中的许多事物的OID,或者至少是OpenSSL已知的事物。

如果您访问https://github.com/openssl/openssl/blob/1aec7716c1c5fccf605a46252a46ea468e684454/crypto/objects/obj_dat.h

并在nsCertType搜索,您将获得:

{"nsCertType", "Netscape Cert Type", NID_netscape_cert_type, 9, &so[407]},

so被预先确定的,如果你跳在它的407 项目,你看:

    0x60,0x86,0x48,0x01,0x86,0xF8,0x42,0x01,0x01,  /* [  407] OBJ_netscape_cert_type */

并在同一文件中的OBJ_netscape_cert_type上进行最终搜索将得出:

  71,    /* OBJ_netscape_cert_type           2 16 840 1 113730 1 1 */

这意味着相应的OID为2.16.840.1.113730.1.1

或者,您可以解码上述描述此OID的整数列表(有关详细信息,请参阅ASN.1如何编码对象标识符? )。

  • 第一个0x6096 10所以2*40 + 16 ,这意味着OID以2.16.开头2.16.
  • 则彼此为“ base128”形式:如果最高有效位为1,则将所有随后的7个最低有效位组合在一起,直到一个最高有效位为0
  • 0x8610000110 2,因此必须使用0x48 aka 01001000 2,因此实际上是00001101001000 2840 10
  • 0x01小于128,所以它本身就是1
  • 0x86仍然是10000110 2,但已经与两个配对0xF811111000 2)0x4201000010 2,我们在这里停止,因为第一位为0),从而000011011110001000010 2完全或113730 10
  • 而最后两个0x01本身就是1

所以我们再次得到2.16.840.1.113730.1.1

您可以在某些在线OID浏览器中仔细检查它,例如: http : //oid-info.com/cgi-bin/display? oid= 2.16.840.1.113730.1.1&action=display ,其中提供了以下说明:

Netscape证书类型(ITU-T X.509 v3建议书的证书扩展名,用于标识证书主题是安全套接字层(SSL)客户端,SSL服务器还是证书颁发机构(CA))

然后,您甚至可以浏览各种弧,例如netscape弧或其他弧,以找出其他OID。

您还将获得完整的ASN.1表示法:

{joint-iso-itu-t(2) country(16) us(840) organization(1) netscape(113730) cert-ext(1) cert-type(1)}

  ask by Jesse translate from so

未解决问题?本站智能推荐:

1回复

如何使用 OpenSSL 生成带有 SubjectAltName 的自签名证书? [关闭]

关闭。 此问题不符合Stack Overflow 准则。 它目前不接受答案。
2回复

如何在C#中将SSL证书与HttpWebRequest一起使用?

目前,我正在编写一个实用程序应用程序,该应用程序将连接到给定的IP和端口,并使用HttpWebRequest检查SSL证书中的信息。 当我尝试提取证书时,出现错误,引发了异常。 异常似乎是因为应对SSL证书的行为似乎触发了另一次验证检查。 这是代码,也许有人可以向我展示一种更好的方法来
1回复

以编程方式为iPhone创建x509证书而不使用OpenSSL

有没有办法通过使用Apple Security框架以编程方式在iPhone的应用程序中创建自签名证书,即。 不必乱用OpenSSL?
1回复

CA签名的X509证书两次包含X509v3扩展“主题备用名称”

如果我使用OpenSSL创建使用CA证书签名并包含X509v3 SAN(主题备用名称)扩展名的X509证书,则生成的证书包含SAN扩展名两次,而如果证书是自签名的,则仅显示SAN扩展名一次(我认为是正确的)。 重现步骤: 之后,如果我检查证书,则将“ X509v3使用者备用名称”部
1回复

使用AIA提取重构证书链?

我正在尝试使用AIA提取来重建证书链,但是只有叶证书具有有效的URI。 我在CA Issuer上测试的所有中间节点均丢失(facebook)或URI返回404。 在撰写本文时, AIA的获取是有效的。 我的问题是:AIA提取仍在正常工作吗? 如果没有,如果我只有叶子证书,是否有可能重建整个证书链
1回复

根CA证书可以位于证书路径的中间吗?

我制作了一个程序,可以连接到website(tls)并将证书链保存到文件中。 有时,来自网站的证书链看起来与我预期的有所不同。 此证书链之一是由Sectigo(ex Comodo)CA发行的。 我认为“ AddTrust外部CA根目录”应该位于链的最后一个证书中,但位于其链中的
1回复

如何在golang中解码x509证书中的复合自定义扩展? 当前代码错误是:asn1:结构错误:序列标签不匹配

我正在编写 golang 代码来解析带有自定义扩展的 X509 证书: 代码如下: } 上面的代码仅对复合扩展序列 TC OID失败。 对于复合扩展序列,我得到“asn1:结构错误:序列标签不匹配”。 请在这方面提供帮助。 .我能够解组除复合扩展 TC OID 之外的所有其余部分
1回复

使用证书中的公钥将引发错误

我计划将auth0用于一些非常具体的要求。 为此,我需要基于证书和公钥的https服务器。 我已从auth0下载证书,并使用以下命令提取了公钥: 然后我从中删除--- Begin ---和--- End ---。 当使用HTTPS服务器的证书和密钥,但是,它不工作,我不断收到此错误