C++ 在应用程序中嵌入SSL密钥

C++ 在应用程序中嵌入SSL密钥,c++,c,openssl,C++,C,Openssl,是否可以通过C/C++API将简单服务器应用程序的私钥和公钥嵌入其中?最好不要先对整个OpenSSL库进行黑客攻击 所谓嵌入,我指的是将字符串或字符*之类的东西传递给API,而不是直接从文件中读取 谢谢。是的。使用BIO\u new\u mem\u buf为读取例程创建一个输入BIO,然后调用相应的PEM\u read\u BIO*函数来提取密钥和证书 BIO *in = BIO_new_mem_buf(pkey, pkey_len); EVP_PKEY *ep = PEM_read_bio_P

是否可以通过C/C++API将简单服务器应用程序的私钥和公钥嵌入其中?最好不要先对整个OpenSSL库进行黑客攻击

所谓嵌入,我指的是将字符串或字符*之类的东西传递给API,而不是直接从文件中读取


谢谢。

是的。使用
BIO\u new\u mem\u buf
为读取例程创建一个输入
BIO
,然后调用相应的
PEM\u read\u 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, ...);
一般来说(不限于
openssl
),当我发现需要将文件之类的东西编码到内存中时,我不希望
open
/
读取
mmap
它,我通常使用
objcopy
(前提是我可以访问给定项目的GNU
binutils
)。它非常有效

例如:

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

objcopy
创建包含
资源.img中数据的目标代码,并创建名为
\u binary\u resource\u img\u start
\u binary\u data\u txt\u end
(和…
length
)的符号。我可以对这些变量进行
extern
声明,并获取它们的地址,以便在内存中查找资源。瞧

您可以使用
d2i_X509()
函数将DER编码的证书从
无符号字符*
缓冲区直接转换为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()

这看起来很有希望,碰巧知道如何为x86_64实现这一点?我自己尝试时遇到了一些问题。我最终使用了这种方法和“objcopy”的组合