如何OpenSSL的加载PKCS#12文件编程? [英] How to load a PKCS#12 file in OpenSSL programmatically?
本文介绍了如何OpenSSL的加载PKCS#12文件编程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在基于OpenSSL的SSL服务器应用程序,我们怎么能编程方式加载的PKCS#12文件?
In an SSL Server Application based on OpenSSL, how can we load a PKCS#12 file programmatically?
另外,我可以加载有证书,密钥和放大器的PKCS#12文件; CA的在同一个文件中OpenSSL的?
Also, can I load a PKCS#12 file having Certificate, Key & CAs in the same file in OpenSSL?
推荐答案
是的,你可以加载一个PKCS#12文件,其中包含证书,与OpenSSL的相同的文件密钥和CA的。
Yes you can load a PKCS#12 file containing certificate, key and CAs in the same file with OpenSSL.
- 使用
d2i_PKCS12_fp()
或d2i_PKCS12_bio()
加载PKCS#12文件。 - 可以选择使用
PKCS12_verify_mac()
来验证密码。 - 使用
PKCS12_parse()
这解密并提取密钥,证书和CA链你。
- Use
d2i_PKCS12_fp()
ord2i_PKCS12_bio()
to load the PKCS#12 file. - Optionally use
PKCS12_verify_mac()
to verify the password. - Use
PKCS12_parse()
which decrypts and extracts key, certificate and CA chain for you.
从的OpenSSL 1.0.0d /演示/ PKCS12 / pkread.c
:
#include <stdio.h>
#include <stdlib.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/pkcs12.h>
/* Simple PKCS#12 file reader */
int main(int argc, char **argv)
{
FILE *fp;
EVP_PKEY *pkey;
X509 *cert;
STACK_OF(X509) *ca = NULL;
PKCS12 *p12;
int i;
if (argc != 4) {
fprintf(stderr, "Usage: pkread p12file password opfile\n");
exit (1);
}
OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();
if (!(fp = fopen(argv[1], "rb"))) {
fprintf(stderr, "Error opening file %s\n", argv[1]);
exit(1);
}
p12 = d2i_PKCS12_fp(fp, NULL);
fclose (fp);
if (!p12) {
fprintf(stderr, "Error reading PKCS#12 file\n");
ERR_print_errors_fp(stderr);
exit (1);
}
if (!PKCS12_parse(p12, argv[2], &pkey, &cert, &ca)) {
fprintf(stderr, "Error parsing PKCS#12 file\n");
ERR_print_errors_fp(stderr);
exit (1);
}
PKCS12_free(p12);
if (!(fp = fopen(argv[3], "w"))) {
fprintf(stderr, "Error opening file %s\n", argv[1]);
exit(1);
}
if (pkey) {
fprintf(fp, "***Private Key***\n");
PEM_write_PrivateKey(fp, pkey, NULL, NULL, 0, NULL, NULL);
}
if (cert) {
fprintf(fp, "***User Certificate***\n");
PEM_write_X509_AUX(fp, cert);
}
if (ca && sk_X509_num(ca)) {
fprintf(fp, "***Other Certificates***\n");
for (i = 0; i < sk_X509_num(ca); i++)
PEM_write_X509_AUX(fp, sk_X509_value(ca, i));
}
sk_X509_pop_free(ca, X509_free);
X509_free(cert);
EVP_PKEY_free(pkey);
fclose(fp);
return 0;
}
这篇关于如何OpenSSL的加载PKCS#12文件编程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文