>       From: owner-openssl-us...@openssl.org On Behalf Of ikuzar
>       Sent: Tuesday, 08 March, 2011 13:02
        
>       I am going to explain below what I HAVE TO do :
>       a) I have to store certificates in a map which is a shared memory. 
> ( I have to do this, I have no choice, because I have to continue 
> what guy before me had started ). So I think it's better to store 
> x509 structure which represents the certificate instead of string. 
> I think it is a good idea. isn't it ?

If the purpose of putting this data in shared memory is to share it, 
and assuming you mean the typedef X509 aka struct x509_st, no.
Many openssl API structs, including that one, consist mostly of 
pointers to data stored elsewhere in memory -- which in any other 
process is invalid and will produce garbage or crashes.

If you only need to share the map but not its contents, which would 
be silly, you could have X509's in your private memory, and just 
put pointers in the shared map, and no other process can use them, 
but if the map is keyed it could see the keys, and know that e.g. 
your process has *some* cert for server#3 or server.domain.name.

>       b) I must be able to extract uri, serial_number from x509 
> structure and store them into a STRING variable. Is there a way 
> to exact URI and SN ? ( see source code above ).

You can definitely get serial. Warning: nowadays serials usually 
aren't sequential (i.e. not 1,2,3,...) and aren't so much numbers 
as longish bitstrings encoded as numbers. Best to treat it as 
opaque, and if you need a UI display it as hex bytes.
In particular, it's not safe to treat serial directly 
as a C string, as the code in your earlier post seems to; 
if you want a C string and even more so if you want 
human-legible text, do hex or base64 or somesuch.

What URI? policy? CRLdist? OCSP? Something else?
If you can identify it you should be able to get it.
And a (valid) URI will actually be good char-string data.
Although if it's encoded as BMP(2byte) or Universal(4), 
you need appropriate 'wide' char/string support; any given 
C can't have both, and it's not guaranteed to have either.

But the combination of "URI" and serial doesn't make sense; 
they don't relate to each other at all. *Issuer* plus serial 
is commonly (but not always) used to identify a certificate.
Issuer is never a URI. It is *sometimes* a domainname, which 
can be PART of a URL which is one kind of URI, but that is 
not the same thing as being a URI. If issuer is what you want, 
yes you can get it, and even in a nice-for-humans (but not 
necessarily programs) text string form, look for "oneline".

>       c) is it possible to send x509 structure (certificate) 
> to peer ? ( apart from handshake ) I 'd like to write something 
> like: SSL_write(ssl, X509* cert)

No for the same reason as above; the x509_st itself has pointers 
only valid within one process memory. This is exactly why 'wire' 
encodings exist, and the usual one for X.509 (including SSL) is DER.
Openssl also prefers DER or PEM-wrapped-DER for local storage, 
but here other methods are *possible*.


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

Reply via email to