C/C++ API を使用して単純なサーバー アプリケーションの秘密鍵と公開鍵を埋め込むことは可能でしょうか? 最初に OpenSSL ライブラリ全体をハッキングしないことが望ましいです。
埋め込みとは、ファイルから直接読み取るのではなく、文字列や char* のようなものを API に渡すことを意味します。
ありがとう。
一般に(に限定されませんがopenssl
)、ファイルのようなものをメモリにエンコードする必要がある場合は、通常使用します(open
特定のプロジェクトでGNUにアクセスできる場合)。それはひどく効果的です。read
mmap
objcopy
binutils
例えば:
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_end
length
extern
関数を使用して、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()
.
はい。を使用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, ...);