2016-04-15 5 views

ответ

2

Вы хотите использовать encoding.pem для декодирования файла pem, который даст вам блоки DER, которые вы можете декодировать с помощью пакета crypto/x509.

Например:

certPEMBlock, err := ioutil.ReadFile(certFile) 
if err != nil { 
    log.Fatal(err) 
} 

var blocks [][]byte 
for { 
    var certDERBlock *pem.Block 
    certDERBlock, certPEMBlock = pem.Decode(certPEMBlock) 
    if certDERBlock == nil { 
     break 
    } 

    if certDERBlock.Type == "CERTIFICATE" { 
     blocks = append(blocks, certDERBlock.Bytes) 
    } 
} 

for _, block := range blocks { 
    cert, err := x509.ParseCertificate(block) 
    if err != nil { 
     log.Println(err) 
     continue 
    } 

    fmt.Println("Certificate:") 
    fmt.Printf("\tSubject: %+v\n", cert.Subject) 
    fmt.Printf("\tDNS Names: %+v\n", cert.DNSNames) 
    fmt.Printf("\tEmailAddresses: %+v\n", cert.EmailAddresses) 
    fmt.Printf("\tIPAddresses: %+v\n", cert.IPAddresses) 
} 
+0

Совершенные благодарит вас - все примеры включены многие вещи, которые мне не нужно, чтобы я не мог видеть лес из деревьев. – user1513388

+0

Фактически один другой вопрос. Если мне нужно получить читаемые значения из OIDS в расширениях. например '\t Расширения: [{Id: 2.5.29.19 Критическое: истинное значение: [48 6 1 1 255 2 1 0]} {Id: 2.5.29.15 Критическое: истинное значение: [3 2 1 6]} {Id: 2.5. 29.14 Критическое: ложное Значение: [4 20 130 58 82 76 175 51 150 249 100 78 198 192 222 152 125 138 116 43 190 57]} {Id: 2.5.29.35 Критическое: ложное Значение: [48 22 128 20 193 119 177 45 157 107 253 81 197 19 136 6 147 96 30 135 125 249 52 15]}] 'Есть ли простой способ получить их? – user1513388

+0

@ user1513388: Я не уверен, что вы имеете в виду. У вас их уже есть; они декодируются как ['pkix.Extension'] (https://golang.org/pkg/crypto/x509/pkix/#Extension). – JimB