是否可以通过C / C ++ API将简单服务器应用程序的私钥和公钥嵌入其中?最好不要先破解整个OpenSSL库。
通过嵌入,我的意思是将类似字符串或char *的内容传递给API,而不是直接从文件中读取。
感谢。
答案 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, ...);