是否可以通过C/C++ API将简单服务器应用程序的私钥和公钥嵌入到其中?最好不要先攻击整个OpenSSL库。在应用程序中嵌入SSL密钥
而嵌入我的意思是通过传递类似字符串或char *的东西到API而不是直接从文件中读取。
谢谢。
是否可以通过C/C++ API将简单服务器应用程序的私钥和公钥嵌入到其中?最好不要先攻击整个OpenSSL库。在应用程序中嵌入SSL密钥
而嵌入我的意思是通过传递类似字符串或char *的东西到API而不是直接从文件中读取。
谢谢。
可以使用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()
。
是的。您使用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, ...);
一般来说(不限于openssl
),当我发现需要编码像一个文件到内存中,我不希望有open
/read
或mmap
它,我通常使用objcopy
(提供我可以访问给定项目的GNU 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
)。我可以对这些变量进行extern
声明并获取它们的地址以便在内存中查找资源。瞧!
这看起来很有希望,碰巧知道如何为x86_64做到这一点?我自己尝试时遇到了一些问题。 – Schoentoon 2012-08-01 09:01:01
我结束了使用这种方法和'objcopy' – Schoentoon 2012-08-29 15:39:58