如何使用OpenSSL函数验证PEM证书的密钥长度 [英] How to verify key length of a PEM certificate using openSSL functions

查看:90
本文介绍了如何使用OpenSSL函数验证PEM证书的密钥长度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何验证以这种方式生成的PEM证书的密钥长度:

How do I verify the key length of a PEM certificate that is generated in this way:

# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

我需要的是一个使用来自OpenSSL的过程的C函数,该函数对PEM证书执行验证(我将其用于lighttpd HTTPS服务器),并返回存储在证书中的密钥的长度(在这种情况下为1024)).

What I need is a C function using procedures from OpenSSL, that performs validation on a PEM certificate (I use it for the lighttpd HTTPS server), and returns the length of the key stored in the certificate (in this case, 1024).

推荐答案

经过一些调整,我相信找到了正确的例程.

After some tweaking, I believe have found the right routines.

以下内容可以帮助您开始探索其他OpenSSL例程,以防您需要处理其他类型的证书( x509 pem ).

The following should get you started with exploring other OpenSSL routines, in case you need to handle other types of certificates (x509, pem).

也请通读本地的 x509.h pem.h ,以获取可恢复您所需要的其他信息的结构和功能.

Also read through your local x509.h and pem.h for structures and functions that will recover other information you're after.

/* Compile with 'gcc -Wall -lcrypto foo.c' or similar...
   ---------------------------------------------------------
   $ ./a.out server.crt
   Opened: server.crt
   RSA Public Key: (1024 bit) 

   $ ./a.out server.key
   ERROR: could not read x509 data from server.key                
*/

#include <stdio.h>
#include <openssl/crypto.h>
#include <openssl/x509.h>
#include <openssl/pem.h>

int main(int argc, char *argv[]) 
{
    FILE *fp = NULL;
    X509 *x509 = NULL;
    EVP_PKEY *public_key = NULL;

    fp = fopen(argv[1], "r");
    if (fp) {
        PEM_read_X509(fp, &x509, NULL, NULL);
        fclose(fp);

        if (x509) {
            fprintf(stderr, "Opened PEM certificate file: %s\n", argv[1]);
            /* do stuff with certificate... */
            public_key = X509_get_pubkey(x509);
            if (public_key) {
                switch (public_key->type) {
                    case EVP_PKEY_RSA:
                        fprintf(stdout, "RSA Public Key: (%d bit)\n", BN_num_bits(public_key->pkey.rsa->n));
                        break;
                    default:
                        fprintf(stdout, "Unknown public key type? See OpenSSL documentation\n");
                        break;
                }
                EVP_PKEY_free(public_key);
            }
            X509_free(x509);
        }
        else {
            fprintf(stderr, "ERROR: could not read x509 data from %s\n", argv[1]);
            return EXIT_FAILURE;
        }
    }
    else {
        fprintf(stderr, "ERROR: could not open file!\n");
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

这篇关于如何使用OpenSSL函数验证PEM证书的密钥长度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆