2010-01-08 6 views
0

Linux의 OpenSSL에서 SSL_CTX_use_PrivateKey_file 함수를 사용하려하지만 false를 반환합니다. 주변 코드는 Windows에서 포팅되어 모든 것이 올바르게 실행됩니다. 시스템에 따라 다르게 수행해야하는 무언가가 있습니까?Linux에서 SSL_CTX_use_PrivateKey_file이 실패 함

우분투에서 OpenSSL 라이브러리 (기본 설정 등)를 컴파일했고 OpenSSL 사이트에서 링크 된 Windows 용 미리 컴파일 된 바이너리를 사용하고 있습니다.

인증서는 .pem 파일과 키에 있습니다. 또한 암호가 설정되어 있습니다.

다음은 기본적으로 수행 된 작업입니다.

SSL_CTX_set_default_passwd_cb(pContext, passwdCallback); 
SSL_CTX_set_default_passwd_cb_userdata(pContext, (void*)this); 
SSL_CTX_use_certificate_file(pContext, strCertificateFile, SSL_FILETYPE_PEM); 
SSL_CTX_use_Privatekey_file(pContext, strPrivateKeyFile, SSL_FILETYPE_PEM); // fail in Linux but work fine in Windows 

누구나 아이디어가 있습니까?

+0

오류를 가져 와서 읽을 수있는 형식으로 변환하려면'SSL_load_error_strings()','ERR_get_error()'및'ERR_error_string()'을 사용하십시오. – caf

답변

2

간단하게하기 위해 암호 콜백에서 모든 코드를 제거하고 간단했습니다. pBuf = "mypass"; return 6; 콜백 함수의 최소값 일 것입니다. 이것은 잘 동작했다.

Windows 코드와 Linux 코드는 무엇이 다릅니 까? 음, strcpy_sstrcpy에 대한 호출이 코드에서 유일한 차이점이었습니다. 이 둘의 차이점은 무엇입니까 (추가 검증 매개 변수 제외)?

문자열 복사 작업의 성공 여부를 확인하기 위해 코드는 단순히 0과 동일한지 확인했습니다. 그러나 두 복사 함수의 반환 값은 서로 다릅니다. Microsoft는 "strcpy"의 반환 동작을 "0은 오류를 의미합니다"에서 "0은 성공을 의미합니다"로 변경했습니다. Sigh ...

관련 문제