亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用任意或已棄用的擴展名簽署證書

如何使用任意或已棄用的擴展名簽署證書

Go
慕俠2389804 2023-07-26 13:38:56
例如,假設我想使用任意或已棄用的擴展名簽署證書(例如 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 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

// 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 已知的事物的 OID。


{"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 的整數列表。

  • 第一個0x609610所以2*40 + 16,這意味著 OID 開頭為2.16.

  • 那么彼此都是“base128”形式:如果最高有效位為 1,則將所有后續數字的 7 個最低有效位組合在一起,直到其中一個最高有效位為 0

  • 0x86100001102,所以必須與0x48aka?010010002一起使用,所以它實際上是00001101001000284010

  • 0x01小于 128 所以它就是它本身,1

  • 0x86仍然是100001102,但必須與0xF8(?111110002?) 和0x42(?010000102配對,我們在這里停止,因為第一位是 0) 所以總共000011011110001000010211373010

  • 最后兩個0x01是他們自己,1

所以我們確實再次得到2.16.840.1.113730.1.1

您可以在一些在線 OID 瀏覽器上仔細檢查它,

Netscape 證書類型(Rec. 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)}



查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號