저는 자체 서명 된 인증서가있는 openssl X509 구조를 가지고 있습니다. 이 구조에서 PEM 형식의 C++ 문자열을 가져와야합니다.
다음은 잘 작동합니다. 그것은 당신이 그것을 할 필요가있는 API를 보여준다. (인증서 필드를 채우는 코드는 없다.) 다음과
#include <iostream>
#include <memory>
#include <string>
using std::cout;
using std::cerr;
using std::endl;
using std::string;
using std::unique_ptr;
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/x509.h>
using X509_ptr = std::unique_ptr<X509, decltype(&::X509_free)>;
using BIO_MEM_ptr = std::unique_ptr<BIO, decltype(&::BIO_free)>;
int main(int argc, char* argv[])
{
int rc = 0;
unsigned long err = 0;
X509_ptr x509(X509_new(), ::X509_free);
/* ... */
BIO_MEM_ptr bio(BIO_new(BIO_s_mem()), ::BIO_free);
rc = PEM_write_bio_X509(bio.get(), x509.get());
err = ERR_get_error();
if (rc != 1)
{
cerr << "PEM_write_bio_X509 failed, error " << err << ", ";
cerr << std::hex << "0x" << err;
exit(1);
}
BUF_MEM *mem = NULL;
BIO_get_mem_ptr(bio.get(), &mem);
err = ERR_get_error();
if (!mem || !mem->data || !mem->length)
{
cerr << "BIO_get_mem_ptr failed, error " << err << ", ";
cerr << std::hex << "0x" << err;
exit(2);
}
string pem(mem->data, mem->length);
cout << pem << endl;
return 0;
}
컴파일은 : 일반적인 출력은
g++ -g -O -std=c++11 x509.cpp -o x509.exe \
-I/usr/local/ssl/include \
/usr/local/ssl/lib/libcrypto.a -ldl
입니다
: 당신이 제안하고 그들이 쓰는 PEM_write_bio_X509 기능을 사용하는 것이 발견
$ ./x509.exe
-----BEGIN CERTIFICATE-----
MCYwHAIBADADBgEAMAAwBB8AHwAwADAIMAMGAQADAQAwAwYBAAMBAA==
-----END CERTIFICATE-----
출처
2014-03-22 04:46:07
jww
내가 x509.c 코드를 보았다 PEM 형식의 데이터. 그런 다음이 데이터를 BIO_read를 사용하는 char 배열로 읽습니다. 감사. – jobless