Open SSL 설치하기에 대한 질문 입니다.

hyper9의 이미지


OpenSSL을 설치해보고 있습니다.
Sorce RPM을 구해서,
./config
make
make test
make install

이렇게 compile을 했는데요,
Error없이 잘 되는 것 같긴해요.

그런데, 실제로 제가 compile한 OpenSSL source가 제대로 사용되는 건지를
잘 모르겠네요 ㅜㅜ

실제로 Application에서 호출하고 있는 OpenSSL function중에 printf()문을
하나 추가해봤는데요..

그 message가 제대로 출력이되지 않는걸보면, compile & installation은 잘되었지만,
Application은 아직 무슨이유에서인지 새로 설치된 OpenSSL을 사용하지 못하고
있는 것 같은데요,,

경로문제 때문일까요? 아님 Makefile을 잘못만들어서 일까요?
조언을 주시면 감사하겠습니다.

세이군의 이미지

Application을 컴파일할 때 OpenSSL라이브러리의 위치를 어디로 지정하였는가를 확인해보셔야 할 것 같습니다.

SourceRPM파일을 받으셨다면 rpmbuild를 이용해서 rpm을 만든다음에 설치하는 것이 기본 방법이지만 내용을 보면 직접 설치하신 것 같습니다. 이 경우 시스템에 새로 설치된 OpenSSL라이브러리가 인식이 안되고 Application을 컴파일할 때 rpm으로 설치된(이미 설치되어 있던) OpenSSL라이브러리가 선택되었을 가능성이 큽니다.

hyper9의 이미지


-lpthread -lssl -lcryptor -lnsl
과 같은 flag들이 있는데, 이걸 보면 어디에 실제 library가 위치하고 있는지를
알 수 있는 걸까요?

잘 이해를 못해서 다시 질문드립니다.
감사합니다. ~

hyper9의 이미지

어떻게 하면, 새로 compile한 library를 쓰게할 수 있을지,
그걸 모르겠습니다.

혹시 조언 주신다면, 감사하겠습니다. ^^

ymir의 이미지

make install 시에..
libssl 및 libcrypto 가 어느 경로에 설치되었는지 확인해 보시고..
ldd 명령으로 테스트 프로그램이 어느 경로의 library 를 참조하는지 확인해 보세요.

$ ldd /usr/bin/openssl
        linux-gate.so.1 =>  (0xb7eea000)
        libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0xb7ea9000)
        libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0xb7d51000)
        libdl.so.2 => /lib/libdl.so.2 (0xb7d4d000)
        libc.so.6 => /lib/libc.so.6 (0xb7c2f000)
        /lib/ld-linux.so.2 (0xb7eeb000)

응용 프로그램이 실행될 때, library path 상에서 library 를 찾기 때문에...
다른 경로에 우선순위가 늦은 경우에는 다른 버전의 library 가 참조될 수 있습니다.

우선은 라이브러리가 설치된 경로를 확인하고, LD_LIBRARY_PATH 를 변경해서...
해당 프로그램이 그 경로의 라이브러리를 참조하게 해서 테스트 한 후..
system default library dir (/lib, /lib64 등) 로 옮겨주는게 나을 것 같네요.

응용프로그램이 라이브러리를 참조하는지는 strace 로 확인할 수도 있습니다.

$ strace -e open /usr/bin/openssl
open("/usr/lib/tls/i686/sse2/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/i686/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/sse2/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/sse2/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/sse2/libssl.so.0.9.8", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/libssl.so.0.9.8", O_RDONLY) = 3
....

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

hyper9의 이미지

이런 좋은 정보를 모르고 있었네요 ^^
많이 도움이 될 것 같습니다. ~

hyper9의 이미지

지금 제가 실행하는 Application이 SSL관련 부분에서 문제를 일으킵니다.
정확히는 딱 정지해버리는데요.

그것이 SSL_CTX_use_certificate()라는 function을 부르면서 정지하는 문제입니다.
그래서 조금 무식해보이기는 하지만 ^^ SSL code를 들여다 보기로 했습니다.

그래서 source RPM도 설치해보고, source 를 compile해봤는데,
SSL_CTX_use_certificate()라는 function을 가지고 있는 library는 libssl.a
인 것 같아보이네요.

그래서 일단은 시험삼아 ssl_rsa.c에 있는 SSL_CTX_use_certificate()라는 function에
printf("--DEBUGGING -- TEST -- \n")라는 한 문장을 추가해서
다시 compile을 해봤습니다..

그러니까,,Application을 실행할 때, "--DEBUGGING -- TEST --"까지를 찍고
다시 정지하는 현상이 보여서,,일단은 제대로 ssl source에 접근을 했나보다
생각했는데요 ...

그러고나서,,한동안 바쁜일에 이 문제를 제대로 못 보다가 어제 다시 시작을 했습니다.
그동안의 기억도 살릴겸 ^^
"printf("--DEBUGGING -- TEST -- \n")"라는 문장대신에
"printf("--DEBUGGING -- TEST #1 \n")"라는 문장으로 대체를 하고
다시 compile하고 Application을 실행했는데
계속 "--DEBUGGING -- TEST -- "이 찍히네요..
그래서 혹시나 하고 libssl.a를 지우고 다시 compile했는데도
계속 예전 message만 찍히는 것 같아요.

어떻게 조사를 해야 문제를 찾아낼 수가 있을까요?
조언 부탁 드립니다...

ymir의 이미지

위에서 이미 ldd 와 LD_LIBRARY_PATH 에 대해서 언급해드렸습니다.
해당 프로그램이 어느 경로의 library 를 참조하는지 확인한 후에..
해당 경로에 수정된 library 를 복사해서 덮어 씌우거나..
LD_LIBRARY_PATH 를 이용해서 수정한 라이브러리가 있는 경로가 우선 참조되도록 변경한 후에..
다시 테스트 해보세요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.