如何使用OpenSSL函数验证PEM证书的密钥长度 [英] How to verify key length of a PEM certificate using openSSL functions
问题描述
如何验证以这种方式生成的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屋!