Look at this example:
$openssl x509 -subject -nameopt oneline,-esc_msb,utf8 -noout -in 13/13_cert.pem
... CN = 13#ტესტერიN13
$openssl x509 -subject -noout -in 13/13_cert.pem
... 
CN=13#\xE1\x83\xA2\xE1\x83\x94\xE1\x83\xA1\xE1\x83\xA2\xE1\x83\x94\xE1\x83\xA0\xE1\x83\x98N13

This certificate was signed by "openssl ca" without changing subject, 
and "openssl req" did not use BMPString and UCS-2 in this case. CN string 
contains Georgian  letters but numbers are in ASCII so it is UTF-8 in fact.

So why "openssl ca" decides to use BMPString format? Looks like 1-byte code 
strings can be used without violating ASN.1 standard



----- Original Message -----
From: Dave Thompson <dthomp...@prinpay.com>
To: openssl-users@openssl.org
Cc: 
Sent: Monday, July 30, 2012 6:47 AM
Subject: RE: strange results after setting utf8 -subj in "openssl ca" command

> From: owner-openssl-us...@openssl.org On Behalf Of Pica Pica Contact
> Sent: Saturday, 28 July, 2012 14:41


Note that X.509 certs (and ASN.1 generally) don't actually support 
UTF8. They support several 1-byte codes (some now obsolete), BMPString 
which is 2-byte UCS-2, and UniversalString which is 4-byte UCS-4.
I believe OpenSSL selects the smallest of these into which the 
specified (Unicode) codepoints fit, which in this case is UCS-2.

> After adding -nameopt oneline,-esc_msb,utf8 result looks fine
> 
That should translate the Unicode to UTF8 and output it, and 
assuming your terminal handles UTF8 then yes it will be good

> I call X509_NAME_oneline() function inside my application to 
> get CN string, and application fails to convert number from 
> CN field to integer, because X509_NAME_oneline() returns 
> "/CN=\x003\x000\x000\x000\x000\x00#" instead of "CN=30000#...".
> 
I'm pretty sure _oneline is what x509 -text without -nameopt uses.

> Probably I should use X509_NAME_print_ex(),
> 
Or if you only want CN, you could get the raw CN item and its value 
out of the name structure which in OpenSSL is STACK_OF(X509_NAME_ENTRY).

> but I have doubts if this string encoding is correct and how 
> it would work with other software. For example, certtool from 
> GnuTLS outputs subject string in this way:
> $ certtool -i --infile 30000.pem
> 
> ...skipped...
> 
>         Subject: 
> CN=#003300300030003000300023044204350441044210e210d410e110e24e2d56fd
> ...skipped...
> 
That apparently is dumping the UCS-2 bytes. Compare to above.

> There are no such problems in "openssl req", I can set UTF8 
> strings with numbers in certificate requests and resulting 
> certificate is ok for me, but I need to ignore subject from 
> certificate requests and set my own value
> 
> 
> Is it possible to fix "openssl ca" command somehow to encode 
> numbers in UTF8 strings as strings, not numbers?

'ca' can only encode ASN.1 strings in the ways defined by ASN.1.
You must decode them accordingly.






Automated List Manager                          majord...@openssl.org

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to