Hi,

Anyone can help me on this issue? I saw there are some mails about "unable to 
get certificate CRL". Seems like a bug?  I am using openssl-0.9.8a. Thanks!

Roger

> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Behalf Of Zhang, 
> Long (Roger)
> Sent: Monday, April 17, 2006 8:18 PM
> To: openssl-users@openssl.org
> Subject: "Error: unable to get certificate CRL"
> 
> 
> Hi,
> 
> I saw a problem of unable to get certificate CRL. The program 
> is as following. It is changed from O'Reilly openssl book 
> example 10-7. In the program, 
> /home/zhangl/openssl/test/ca1/newcerts/ca1cert.pem is my root 
> self signed CA.  It signed a lot of certificates. 01.pem, 
> 02.pem to 09.pem. While 01.pem signs 02.pem, 02.pem signs 
> 03.pem until 09.pem. I used ca1cert.pem signs 0A.pem, 0B.pem 
> and 0C.pem as another list. I revoked 0A.pem and 0C.pem and 
> generated crl list in 
> /home/zhangl/openssl/test/ca1/newcerts/crl.pem.  0A.pem and 
> 0C.pem have no relationship with 01.pem, 02.pem, etc except 
> they are all signed by ca1cert.pem.  But after I compiled the 
> program, I got "Error: unable to get certificate CRL". If I 
> changed CLIENT_CERT to 
> /home/zhangl/openssl/test/ca1/newcerts/01.pem, then 
> verification passed. Others all failed.  Why 01.pem could 
> success while others failed? 01.pem-09.pem has no relation 
> with 0A.pem and 0C.pem, why I still got this kind of error? 
> Thanks in advance!
> 
> Roger
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <openssl/x509_vfy.h>
> #include <openssl/err.h>
> #include <openssl/pem.h>
> //int RAND_load_file(const char *filename, long bytes);
> 
> //int seed_prng(int bytes)
> //{
> //      if (!RAND_load_file("/dev/random", bytes))
> //              return 0;
> //return 1;
> //}
> void handle_error(const char *file, int lineno, const char *msg)
> {
>         fprintf(stderr, "** %s:%i %s\n", file, lineno, msg);
>         ERR_print_errors_fp(stderr);
>         exit(-1);
> }
> #define int_error(msg) handle_error(__FILE__, __LINE__, msg)
> /* these are defintions to make the example simpler */
> #define CA_FILE "/home/zhangl/openssl/test/ca1/newcerts/ca1cert.pem"
> #define CA_DIR "/home/zhangl/openssl/test/ca1/newcerts"
> #define CRL_FILE "/home/zhangl/openssl/test/ca1/newcerts/crl.pem"
> #define CLIENT_CERT "/home/zhangl/openssl/test/ca1/newcerts/02.pem"
> int verify_callback(int ok, X509_STORE_CTX *stor)
> {
>         if(!ok)
>         fprintf(stderr, "Error: %s\n",
>         X509_verify_cert_error_string(stor->error));
>         return ok;
> }
> 
> int main(int argc, char *argv[])
> {
>         X509 *cert;
>         X509_STORE *store;
>         X509_LOOKUP *lookup;
>         X509_STORE_CTX *verify_ctx;
>         FILE *fp;
>         OpenSSL_add_all_algorithms();
>         ERR_load_crypto_strings();
>         //seed_prng(100);
>         /* first read the client certificate */
>         if (!(fp = fopen(CLIENT_CERT, "r")))
>                 int_error("Error reading client certificate file");
>         if (!(cert = PEM_read_X509(fp, NULL, NULL, NULL)))
>                 int_error("Error reading client certificate in file");
>         fclose(fp);
>         /* create the cert store and set the verify callback */
>         if (!(store = X509_STORE_new()))
>                 int_error("Error creating X509_STORE_CTX object");
>         X509_STORE_set_verify_cb_func(store, verify_callback);
>         /* load the CA certificates and CRLs */
>         if (X509_STORE_load_locations(store, CA_FILE, CA_DIR) != 1)
>                 int_error("Error loading the CA file or directory");
>         if (X509_STORE_set_default_paths(store) != 1)
>                 int_error("Error loading the system-wide CA 
> certificates");
>         if (!(lookup = X509_STORE_add_lookup(store, 
> X509_LOOKUP_file())))
>                 int_error("Error creating X509_LOOKUP object");
>         if (X509_load_crl_file(lookup, CRL_FILE, 
> X509_FILETYPE_PEM) != 1)
>                 int_error("Error reading the CRL file");
>         /* enabling verification against CRLs is not possible
>                 in prior versions */
>         /* set the flags of the store so that CRLs are consulted */
>         X509_STORE_set_flags(store, X509_V_FLAG_CRL_CHECK |
>                                 X509_V_FLAG_CRL_CHECK_ALL);
>         /* create a verification context and initialize it */
>         if (!(verify_ctx = X509_STORE_CTX_new()))
>                 int_error("Error creating X509_STORE_CTX object");
>         /* X509_STORE_CTX_init did not return an error condition
>         in prior versions */
>         if (X509_STORE_CTX_init(verify_ctx, store, cert, NULL) != 1)
>                 int_error("Error initializing verification context");
>         /* verify the certificate */
>         if (X509_verify_cert(verify_ctx) != 1)
>                 int_error("Error verifying the certificate");
>         else
>                 printf("Certificate verified correctly!\n");
>         return 0;
> }
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    openssl-users@openssl.org
> Automated List Manager                           [EMAIL PROTECTED]
> 
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to