4

C/C++ API を使用して単純なサーバー アプリケーションの秘密鍵と公開鍵を埋め込むことは可能でしょうか? 最初に OpenSSL ライブラリ全体をハッキングしないことが望ましいです。

埋め込みとは、ファイルから直接読み取るのではなく、文字列や char* のようなものを API に渡すことを意味します。

ありがとう。

4

3 に答える 3

3

一般に(に限定されませんがopenssl)、ファイルのようなものをメモリにエンコードする必要がある場合は、通常使用します(open特定のプロジェクトでGNUにアクセスできる場合)。それはひどく効果的です。readmmapobjcopybinutils

例えば:

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

objcopyのデータを含むオブジェクトコードを作成し、and (および... )とresource.img呼ばれるシンボルを作成します。これらの変数を宣言し、それらのアドレスを取得して、メモリ内のリソースを見つけることができます。Voilà!_binary_resource_img_start_binary_data_txt_endlengthextern

于 2012-08-01T01:11:10.780 に答える
3

関数を使用して、DER でエンコードされた証明書をバッファーから X509 オブジェクトd2i_X509()に直接変換できます。unsigned char *

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

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

d2i_*()キーなど、他の OpenSSL オブジェクトにも同様の機能があります。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 に答える