3

I'm using ssldump to extract the certificate in a communication. When i parse the result I obtain a string in go defined as:

var string certStr
certStr = "30 82 06 9f...."

How can I parse it to a X509 certificate?

UPDATED

I have tried to parse it directly:

certSlc := []byte(certStr)
cert,err := x509.ParseCertificates(certSlc)

But the result was:

Error:asn1: structure error: tags don't match (16 vs {class:0 tag:19 length:48 isCompound:true}) {optional:false explicit:false application:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false}

Should I do another kind of conversion? maybe is the string incomplete or has got wrong type of cert?

MrReboot
  • 263
  • 4
  • 13
  • Maybe have a look at this package : https://golang.org/pkg/crypto/x509/ Hope that helps. – Depado Oct 17 '16 at 10:29
  • Yes, I have already seen that class but i'm getting a format error when I use ParseCertificates. Maybe the problem is that I'm not able to generate the byte slice from the string correctly – MrReboot Oct 17 '16 at 10:45
  • Could you provide more details ? How are you converting your string byte slice ? Could you provide more code and show what you tried/failed to use ? – Depado Oct 17 '16 at 12:28
  • @MrReboot, You can directly convert a string to a bytes slice, there's not really an "incorrect" way to do it. Please show an example of the problem you're having, with a [mcve] – JimB Oct 17 '16 at 12:40
  • Does any of these examples help you? https://golang.org/src/crypto/x509/example_test.go – thoeni Oct 17 '16 at 13:10
  • I think my problem is parsing the hex string into the byte slice. This is what i need in go: http://stackoverflow.com/questions/140131/convert-a-string-representation-of-a-hex-dump-to-a-byte-array-using-java?rq=1 – MrReboot Oct 17 '16 at 15:46

1 Answers1

3

I found the error. The problem was in the source. As I was explaining, my cert string was "30 82 06 09...". This source must be decoded with:

hex.DecodeString(certStr)

The problem is that hex decoding doesn't work with this format. The error I obtained was:

encoding/hex: invalid byte: U+0020 ' '

So, removing whitespaces and carriage returns in the original string is the solution to make it work.

After decoding in a byte slice the X509 certificate can be created with no problem.

MrReboot
  • 263
  • 4
  • 13