在应用程序中嵌入SSL密钥

时间:2012-08-01 00:06:29

标签: c++ c openssl

是否可以通过C / C ++ API将简单服务器应用程序的私钥和公钥嵌入其中?最好不要先破解整个OpenSSL库。

通过嵌入,我的意思是将类似字符串或char *的内容传递给API,而不是直接从文件中读取。

感谢。

3 个答案:

答案 0 :(得分:3)

一般情况下(不限于openssl),当我发现需要将类似文件的内容编码到内存中时,我不希望open / read或{{ 1}}它,我通常使用mmap(假设我可以访问给定项目的GNU objcopy)。这非常有效。

例如:

binutils

objcopy --input binary --output elf32-i386 --binary-architecture i386 resource.img resource.o 创建包含objcopy中数据的对象代码,并创建名为resource.img_binary_resource_img_start(以及...... _binary_data_txt_end)的符号。我可以对这些变量进行length声明并获取它们的地址,以便在内存中查找资源。瞧!

答案 1 :(得分:3)

您可以使用d2i_X509()函数将DER编码的证书从unsigned char *缓冲区直接转换为X509对象:

const unsigned char cert_DER[] = /* ... */;

const unsigned char *p = cert_DER;
X509 *cert_X509 = d2i_X509(NULL, &p, sizeof cert_DER);

其他OpenSSL对象也有类似的d2i_*()函数,比如键 - 例如。 d2i_RSAPrivateKey()

答案 2 :(得分:0)

是。您使用BIO_new_mem_buf为读取例程创建输入BIO,然后调用相应的PEM_read_bio_*函数来提取密钥和证书。

BIO *in = BIO_new_mem_buf(pkey, pkey_len);
EVP_PKEY *ep = PEM_read_bio_PrivateKey(in, ...);

BIO *in = BIO_new_mem_buf(certs, cert_len);
X509 *x = PEM_read_bio_X509_AUX(in, ...);