4

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

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

谢谢。

4

3 回答 3

3

一般来说(不限于openssl),当我发现需要将文件之类的东西编码到内存中时,我不希望open/readmmap它,我通常使用objcopy(前提是我可以访问给binutils定项目的 GNU)。它非常有效。

例如:

objcopy --input binary --output elf32-i386 --binary-architecture i386 resource.img resource.o

objcopy创建包含数据的目标代码,resource.img并创建名为_binary_resource_img_startand _binary_data_txt_end(and ... length) 的符号。我可以extern声明这些变量并获取它们的地址,以便在内存中找到资源。瞧!

于 2012-08-01T01:11:10.780 回答
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().

于 2012-08-01T03:22:43.210 回答
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, ...);
于 2012-08-01T00:40:30.713 回答