On Tue, Mar 11, 2003 at 01:54:55PM -0800, rajagopalan ramanujam wrote:
> 
> hi,
> 
> I am having a problem  when reading a certificate and
> private key from a memory buffer instead of a file.
> i am using d2i_X509(NULL,&cert,strlen(cert)) to read
> the certificate string which was defined in one of
> .pem
> file. Should i use SSL_CTX_use_certificate_ASN1
> instead??? Please help me.....
> 
> copied from server.pem file
> unsigned char * cert
> ="MIIDDzCCAs2gAwIBAgICA............Qw==";
> unsigned char * key =
> "y5qH6Q0Nvb5SUcJEYY...........p6==";

Incorrect. This is PEM format, d2i_* expected DER/binary input
use:
% openssl x509 -in server.pem -noout -C > server_cert.c
will produce some like this:
[cut]
unsigned char XXX_certificate[1592]={
0x30,0x82,0x06,0x34,0x30,0x82,0x05,0x1C,0xA0,0x03,0x02,0x01,0x02,0x02,0x01,0x0D,
[cut]

> 
> here is my sample server code :
> 
> void ssl_server ()
> {
> 
>    SSL_CTX* ctx;
>   SSL*     ssl;
>   X509*    client_cert,*x509_cert,*x509_key;
>   char*    str;
>   SSL_METHOD *meth;
>   int                 theFd;
>   fd_set              theFdSet;
>   
>   /* SSL preliminaries. We keep the certificate and
> key with the context. */
> 
>   SSL_load_error_strings();
>   SSLeay_add_ssl_algorithms();
>   meth = SSLv23_server_method();
>   ctx = SSL_CTX_new (meth);
> 
>   x509_cert = d2i_X509(NULL,&cert,strlen(cert));
> 
>   if (SSL_CTX_use_certificate(ctx,x509_cert) <= 0) {
>     return;
>   }
> 
>   x509_key = d2i_X509(NULL,&key,sizeof(key));
>   
>   if (SSL_CTX_use_PrivateKey(ctx,x509_key) <= 0) {
>     return;
>   }
> 
>   if (!SSL_CTX_check_private_key(ctx)) {
>     printf("Private key does not match the certificate
> public key\n");
>     return;
>   }
> 
>       .
>       .
> }
> 
> when d2i_X509 its failing for the following reason.
> IMPLEMENT_ASN1_FUNCTIONS(X509)
> ASN1_VALUE *ASN1_item_d2i(..)
> asn1_check_tlen(..)
> ASN1err(ASN1_F_ASN1_CHECK_TLEN, ASN1_R_WRONG_TAG);
> return 0;


here is sample code:
X509 *
get_cert( void)
{

        unsigned char   *der = XXX_certificate;
        X509            *crt = NULL;

        if ( NULL == ( crt = X509_new())) {

                /* Ops, out-of-memory? */
                return NULL;
        }
        
        return d2i_X509( &crt, &der, sizeof( XXX_certificate));
}

> 
> 
> __________________________________________________
> Do you Yahoo!?
> Yahoo! Web Hosting - establish your business online
> http://webhosting.yahoo.com
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    [EMAIL PROTECTED]
> Automated List Manager                           [EMAIL PROTECTED]
> 

-- 
regards
        Valentin Zahariev
        CTO
        E-CARD Ltd.
--------------------
http://www.e-card.bg
--------------------
PGP keyID: 0xC005C5CA 
Key fingerprint = F3 46 26 21 8F F0 5E 19  5B B3 34 08 24 9E 71 13  C0 05 C5 CA
http://certs.e-card.bg:11371/pks/lookup?op=get&search=0xC005C5CA

Attachment: pgp00000.pgp
Description: PGP signature

Reply via email to