2012-08-01 3 views
3

간단한 서버 응용 프로그램의 개인 키와 공개 키를 C/C++ API를 통해 포함시킬 수 있습니까? 가급적이면 전체 OpenSSL 라이브러리를 먼저 해킹하지 않아도됩니다.응용 프로그램에 SSL 키 포함

그리고 embed는 파일에서 직접 읽는 대신 문자열이나 char * 같은 것을 API에 전달하는 것을 의미합니다.

감사합니다.

답변

3

당신은 직접 X509의 object에 unsigned char * 버퍼에서 DER로 인코딩 된 인증서를 변환 할 d2i_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().

+0

나는이 방법과 'objcopy' – Schoentoon

0

예. BIO_new_mem_buf을 사용하여 읽기 루틴에 대해 BIO 입력을 만든 다음 적절한 PEM_read_bio_* 함수를 호출하여 키와 인증서를 추출합니다. (openssl에 국한되지 않음) 내가 open/read 또는 mmap 그것을 가지고하지 않으려는 메모리에 파일 같은 것을 인코딩 할 필요를 찾을 때, 나는 보통 objcopy을 사용하여 일반적으로

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, ...); 
3

(제공 I 해당 프로젝트에 대해 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으로 만들 수 있으며 메모리에서 리소스를 찾기 위해 그들의 주소를 취할 수있다. Voilà!

+0

이것은 매우 유망 해 보이며 x86_64에서 이것을 수행하는 방법을 알고 있습니까? 나 혼자 힘으로 노력하면서 몇 가지 문제가있다. – Schoentoon

관련 문제