On Wed, Sep 22, 2010 at 02:40:26PM +0530, Naveen B.N wrote:
> Hello,
> I am using Linux.
> I am trying to print the subjectAltName present in the certificate, but
> i am seeing crash in /lib/libcrypto.so.6
> core was generated by `./a.out'.
> Program terminated with signal 11, Segmentation fault.
> #0 0x058b8a03 in OBJ_cmp () from /lib/libcrypto.so.6
> (gdb) bt
> #0 0x058b8a03 in OBJ_cmp () from /lib/libcrypto.so.6
> #1 0x0593a786 in X509v3_get_ext_by_OBJ () from /lib/libcrypto.so.6
> #2 0x0593a7ce in X509v3_get_ext_by_NID () from /lib/libcrypto.so.6
> #3 0x08048870 in find_root_cert (in=0x9445a72 "", len=1002) at
> find_root.c:37
> #4 0x080489af in main () at find_root.c:65
>
> Help me to solve this issue. Please guide, if any other alternative to
> method to achieve the same
> Please find the code used below.
First hint: look at the warnings issued by the compiler.
They usually indicate you are doing something wrong.
>
> Thanks and Regards
> Naveen
>
> /************ Start code ***************/int find_root_cert(char
> *in,int len)
> {
> X509 *cert1=NULL;
> X509_NAME *name;
> char *buffer; X509_EXTENSION *ext=NULL;
> char *test;
> int pos=0,nid;
>
> cert1=d2i_X509(NULL,&in,len);
> printf("\n cert=%x ", cert1);
> name=X509_get_subject_name(cert1);
> buffer=X509_NAME_oneline(name, 0, 0);
> if(strstr(buffer,"CN=kdc.globaledgesoft.com")==NULL)
> return -1;
> else
> { * nid=OBJ_sn2nid("subjectAltName");
> pos=X509v3_get_ext_by_NID (cert1,OBJ_sn2nid("subjectAltName"), -1);
/* no need to translate constant string ("subjectAltName") to NID
Use the nid constant directly: NID_subject_alt_name
X509v3_get_ext_by_NID() expects a pointer to extensions
X509_get_ext_by_NID() expects a cert as first argument
*/
pos=X509_get_ext_by_NID (cert1, NID_subject_alt_name, -1);
/* need to check for existance of subjectAltName */
if (pos == -1)
ERROR();
> ext=X509v3_get_ext(cert1,pos);
Same as above: use X509_get_ext() instead.
The compiler told you about incompatible pointer types. Don't ignore it.
> if(ext!=NULL){
> test=d2i_ASN1_IA5STRING(&ext->value->data,NULL,0);
It is not that easy....
The subaltname is tagged as otherName in the kdc.cer
You need to parse the othername, which contains the OID
1.3.6.1.5.2.2
which indicates a DER encoded KRB5PrincipalName
search Google for the OID
Cheers
Christian
______________________________________________________________________
OpenSSL Project http://www.openssl.org
User Support Mailing List [email protected]
Automated List Manager [email protected]