목차
1. 이전 openssl 정적 라이브러리 빌드 포스팅
이전 포스팅에서 Openssl 1.1.0i 버전 라이브러리 소스코드를 다운받아 리눅스 우분투 20.04 LTS 환경에서 빌드하는 방법을 알아보았습니다.
오늘 포스팅에서 다루는 개발환경을 구성하기 위해서는 아래 포스팅을 꼭 참고하여 라이브러리를 구성해주세요.
빌드된 라이브러리를 나만의 개발환경에 링크하여 보안 API들을 사용해보겠습니다.
아래는 이전 포스팅 링크입니다.
2023.07.22 - [Linux/Openssl] - [Linux] openssl 1.1.0i 정적 라이브러리 빌드(필요 패키지 설치 및 빌드)
2. Codelite 설치
우선 코드라이트 설치부터 진행하겠습니다.
코드라이트란 우리가 흔히 윈도우 환경에서 Visual Code 처럼 다른 언어를 개발하기위한 IDE입니다.
안드로이드로 따지자면 안드로이드 스튜디오라 생각하면 될 것 같습니다.
이처럼 코드라이트도 멀티 플랫폼을 지원하는 IDE입니다.
우리는 이 Codelite를 이용하여 리눅스 우분투 환경에서 Openssl 개발 환경 및 프로젝트를 구성하고 예제를 실행해보도록 하겠습니다.
우선 아래와 같이 리눅스 쉘에서 명령을 실행하여 코드라이트를 설치합니다.
설치가 정상적으로 완료되었다면 아래와 같이 패키지 설치 목록에 나타납니다.
$ sudo apt-get install codelite make
$ sudo dpkg -l | grep codelite
3. 예제 Codelite 프로젝트 생성
우선 앞으로 예제를 수행할 프로젝트를 만들도록 하겠습니다.
아래 명령을 실행하여 디렉토리를 만듭니다.
$ mkdir ~/openssl_test
$ cd ~/openssl_test
그리고 이전 포스팅에서 만들었던 openssl 정적라이브러리와 헤더를 앞으로 진행할 프로젝트의 경로로 복사하겠습니다.
아래 명령을 실행하여 라이브러리를 복사합니다.
$ cp /tmp/openssl-1.1.0i/libcrypto.a ~/openssl_test/
$ cp /tmp/openssl-1.1.0i/libssl.a ~/openssl_test/
$ cp -R /tmp/openssl-1.1.0i/include ~/openssl_test/
$ ls
라이브러리를 복사했다면 이제 예제 Codelite 프로젝트를 생성해보겠습니다.
아래 명령을 쉘에서 실행하여 codelite를 실행합니다.
$ codelite
codelite가 실행되면 화면에 있는 "New Workspace" 버튼을 클릭합니다.
그리고 Workspace Name은 openssl_example로 설정하고 Workspace Path는 /home/{사용자이름}/openssl_test 로 설정합니다.
하단의 Create the workspace under a separate directory 체크박스는 체크합니다.
이후 OK버튼을 눌러 생성합니다.
이후 왼쪽에 생성된 oepnssl_example 프로젝트 명에 마우스 오른쪽 버튼을 클릭하여 New -> New Project 를 클릭합니다.
그리고 콘솔의 Simple executable (gcc)를 선택하고 Next 합니다.
그리고 프로젝트명을 example로 설정하고 Next를 선택합니다.
이후 Compiler는 gnu gcc, Debugger는 GNU gdb debugger, Build System은 Default로 설정하고 Finish합니다.
자 이제 F5를 눌러 빌드가 가능하고 Main모듈이 생성되었습니다.
4. openssl 정적 라이브러리 링크 및 헤더 경로 설정
이제 이전 포스팅에서 만들었던 openssl 라이브러리를 이 프로젝트에 링크하도록 하겠습니다.
왼쪽에 만들어진 example 프로젝트를 마우스 우클릭하여 Setting... 메뉴를 클릭합니다.
이후 Compiler 메뉴에서 Include Paths 경로에 우리가 복사한 openssl include 경로를 입력합니다.
앞으로 뭐든지 '.' 즉, 현재 경로 기준은 codelite example 프로젝트 파일이 위치한 곳입니다.
include Paths에는 ".;../../include" 를 입력합니다.
'.' 은 현재 경로에 있는 헤더들을 참고하겠다는 의미입니다.
"../../include" 는 example 프로젝트 파일이 "/home/{사용자명}/openssl_test/openssl_example/example/example.project" 경로에 있고 우리가 복사한 openssl include 경로는 "/home/{사용자명}/openssl_test" 에 있기때문에 상대경로로는 ../../ 입니다.
다음으로 libssl.a와 libcrypto.a 정적 라이브러리를 링크해보겠습니다.
왼쪽 메뉴에서 Linker 메뉴로 들어갑니다.
마찬가지로 라이브러리 경로도 위 include 경로와 동일하기 때문에 ../../을 설정하고 라이브러리 명을 입력합니다.
리눅스에서는 라이브러리 파일명 앞에 붙은 lib를 제외하고 입력합니다.
그리고 예제 실행을 위해 pthread, dl라이브러리도 같이 링크합니다.
그래서 총 "ssl;crypto;pthread;dl" 을 입력합니다.
자 이제 설정이 끝났습니다.
5. 정상 설치 확인 간단 예제
이제 간단하게 openssl 라이브러리가 잘 설정되었는지 아래 코드로 확인해보겠습니다.
메인 코드를 수정하고 Ctrl + F5를 입력하여 빌드 및 실행합니다.
#include <stdio.h>
#include <stdlib.h>
#include <openssl/ssl.h>
int main() {
// OpenSSL 초기화
SSL_library_init();
SSL_load_error_strings();
OpenSSL_add_all_algorithms();
// SSL 컨텍스트 생성
SSL_CTX* ssl_ctx = SSL_CTX_new(SSLv23_client_method());
if (!ssl_ctx) {
fprintf(stderr, "SSL 컨텍스트 생성 실패\n");
exit(EXIT_FAILURE);
}
// SSL 컨텍스트 제거
SSL_CTX_free(ssl_ctx);
printf("OpenSSL 라이브러리가 성공적으로 링크되었습니다.\n");
return 0;
}