是否可以通過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