openssl 을 이용한 프로그래밍에서..

jinoos의 이미지

미리 진문의 요를 말씀드리겠습니다.
소스에 들어있는 pem 파일들을 생성하는 법을 모르겠습니다.

openssl 용 socket을 이용해서 데이터 전송을 하려고 합니다.

리눅스저널에 두개의 자료를 찾아서 해보고 있구요.
http://www.linuxjournal.com/article.php?sid=4822
http://www.linuxjournal.com/article.php?sid=5487
자료에서 사용된 파일은
http://www.rtfm.com/openssl-examples/openssl-examples-20020110.tar.gz
입니다.

의 소스를 수정해서 좀더 공부하려고 하는데..
*.pem 파일들 때문에 골머리를 싸고 있습니다.

위 압축된 소스에 보면 간단한 C소스가 있습니다. 이것을 이용해서 컴파일 해서 테스트는 잘됩니다.

다만 제가 pem 파일들을 만들어서 테스트를 해봐도 파일이 제대로 안만들어 지는지 관계성 여부때문에 계속 에러가 나옵니다.

위소스에서 pem 파일은 총 4개 입니다.
dh1024.pem

-----BEGIN DH PARAMETERS-----
MIGHAoGBAKZX7ZcxJ/zhgo1klOm/SAN9n7qHex7NVnstA7N/N+pZT4H4pgUTHDyb
4YDRa7uWELKxpHnElqz7uu25oPrM2p83vNsfIC4J+HP51q5LjMcpwT698HVOVvV5
c08e+THHAZGFlgvmJHFbeYiH24sN/ZZAj12IKD9EQmuTXI4tNfyTAgEC
-----END DH PARAMETERS-----

root.pem

-----BEGIN CERTIFICATE-----
MIIC0zCCAjygAwIBAgIBADANBgkqhkiG9w0BAQQFADBWMQswCQYDVQQGEwJLUjER
MA8GA1UECBMIZGltZWNsdWIxDjAMBgNVBAcTBVNlb3VsMREwDwYDVQQKEwhkaW1l
Y2x1YjERMA8GA1UEAxMIZGltZWNsdWIwHhcNMDMwNzIyMTA1NjI3WhcNMDQwNzIx
MTA1NjI3WjBWMQswCQYDVQQGEwJLUjERMA8GA1UECBMIZGltZWNsdWIxDjAMBgNV
BAcTBVNlb3VsMREwDwYDVQQKEwhkaW1lY2x1YjERMA8GA1UEAxMIZGltZWNsdWIw
gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMnRQW8gcexFWV3/3rNQaKeFGmyV
Lj12rAXBNl2aYrQ/bOahgp5rlPizhfyRVLSgINEY+MZ4h17KbB2jVecQxw3WeVGg
rdEyOYHcVTznDhe0I3RZ93oFdTgEdOa3RBjJFMoMf1RGqKTaCrs/vthBZFs/2D7k
js6K3KWfmJAYMMCjAgMBAAGjgbAwga0wHQYDVR0OBBYEFPJMKiQzk7EJejzPxcec
p41r683bMH4GA1UdIwR3MHWAFPJMKiQzk7EJejzPxcecp41r683boVqkWDBWMQsw
CQYDVQQGEwJLUjERMA8GA1UECBMIZGltZWNsdWIxDjAMBgNVBAcTBVNlb3VsMREw
DwYDVQQKEwhkaW1lY2x1YjERMA8GA1UEAxMIZGltZWNsdWKCAQAwDAYDVR0TBAUw
AwEB/zANBgkqhkiG9w0BAQQFAAOBgQBYrQFWPD6QeKhcni6skJtgFH1smZv6n2SX
x6iGyCywAx13nefsmp1QoYB3o7vd9UeAssnruQAgb9qo1+BQaHnzx36nx7voBLor
QUlye+Vn3lLViwC8Dtd+7vmbQmE6IEjvF8TIHxiz6Tb+xIIjBYdUezKBDGqJEXPW
RzcH27ddeA==
-----END CERTIFICATE-----

server.pem, client.pem

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,9C9621FCD242E377

+bmOxVYDjrG8uTschMYoN6w9zTU/b8kT2XcwSBWYrMZsbvCuduWqrvfLCHR+KuTJ
X3ZXrcRL2T5/N3/ZnKvrRcsIVVJa0dojmCpqhOPdX9nansdFjJvH3VMbkUidjv4z
AORYjQ57AmjqYNO/2RjLaL5nc01TMP+S1Iyz1QwIEjQps+phChD2/SzIjJn9ClV8
bj5PVaxkViSgGJcg/R5GDZ9IE/IQZjaxG2MlvjlHtwYPTByhjMy2pmuwG57Wg8zF
vL33wBcsN6LuEQ4eVh/75bYIAqICcfCD/JGx6L0MlVZM/pU0mBvNiFWtt0caMUUv
6x+3loVNTeydNs0P+rYIR5C3L9Vr+lKwbE0KDiccF1OykM4J122YL9+ZlF2YWP0/
L/iqmsbA8zBBpqzQ01fO1OHykvYKkzb0LIhLLtaAlqnXHcC4GCt9946yi52KSRCe
SePotJYQqlDYLSm0ZnN3/E6ibuI17+OANKJXg6n6OqxmBz1UB5SP0k6lWVzav8Hm
Q1RIXqwlQdViEPByAhp+NEH/2oOuvoT4JTwL7eVP42TQVA6lKDZ03+E3olUT2uZe
0hP8/WeTuxYvhiLSFiZV60ILoJ69dVnlwO4Yek4QOCQ8kaI4LJCh6XZ9zb67905o
kAFn4tVPqGqyphLpNK6LCNfrIQE4j50mNIcQcOj/MvckmzhLCHmwU3BibugqJcYh
037GUQ/gyjCBDslStH6hv0vydZCuWNR4hOcf77f2n0oV08pMHWP7ce6ve7S4DN4x
EAYLvHCDDvkgqjlIU7Tv3ThIpoABROwlmi3rkrXU0bsIV87CrQQ69g==
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICeTCCAeICAQAwDQYJKoZIhvcNAQEEBQAwgYQxCzAJBgNVBAYTAktSMQ8wDQYD
VQQIEwZqaW5vb3MxDzANBgNVBAcTBmppbm9vczEPMA0GA1UEChMGamlub29zMQ8w
DQYDVQQLEwZqaW5vb3MxDzANBgNVBAMTBmppbm9vczEgMB4GCSqGSIb3DQEJARYR
amlub29zQGppbm9vcy5jb20wHhcNMDMwNzIzMTAxNTU0WhcNMDQwNzIyMTAxNTU0
WjCBhDELMAkGA1UEBhMCS1IxDzANBgNVBAgTBmppbm9vczEPMA0GA1UEBxMGamlu
b29zMQ8wDQYDVQQKEwZqaW5vb3MxDzANBgNVBAsTBmppbm9vczEPMA0GA1UEAxMG
amlub29zMSAwHgYJKoZIhvcNAQkBFhFqaW5vb3NAamlub29zLmNvbTCBnzANBgkq
hkiG9w0BAQEFAAOBjQAwgYkCgYEA6LcKp+ZGxojSlAPqzfoq0Ei/fEFQwXa9gs2x
XWS/QOZq/f1tw/t14N5egbGtrKs4JdKVmtaFuOTrmz9TflLM/bCgBft5KHXVv4rI
Tk9Ar3FkU7jym3CNLSnGtJdl5CnttwVzXJu00oDNclpgEF84Wixz/i0jXolEkTVt
Y25jOBkCAwEAATANBgkqhkiG9w0BAQQFAAOBgQDm7W/AgJabf2gRdkIfz7z2umMV
CIISPdFwDtPLTvhWnBeyl2UuoeUetKCRQB1CExmquzpnen0xQJy4FvdiRx/0umiW
S75lOBtC9PhSZbOjp+gk6gSNjhFLyWkVQtAvErlBIEJ90IQ1cxlmb4v5vMOpx7za
GmA4spLXRKXETdIbiw==
-----END CERTIFICATE-----

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,2A6A266F64349B57

wv/qZIkNZiBqcwGlZcNH5MbVXNPhxafoOzO0vG26W4xyQC3j6A+JPFC5OFNWcQ4r
UxjRwdApXY4QZNih84S2lxSYEj7rkRrxk1bMi+sQRkHHteAE/bVQqFLCYXnZxvH7
BolDiFMI8gkjtZpi3LGiCayD83K6S29tOpBTDbkHs10bL1Mcylt8x5H+2hPgDo1V
Krob4aoltp40A7EEEI0VVsx3F7vxkTtGrju5tz8cP05Bg/ZB1j5hNL3CwgIXh71D
YOiWpgnY+2k8pIDZCPu0Iz34gwWRUisE+b6Z5owGjymm5lFRSBymARBNmBThCJKp
tpz/cYLAUDEiLJWWYn1Rdm6qAKm3MkRBt7uG9siwW1cgoVZBnjR1GehB8/f5ur7+
R5TIDpBap+G2Bbnvf8Rmr/TIbjcqpDKhiJYNAmEdOSrQlk/fBXHMJ0cUN3P3F+EU
yZPrItvYQqTPWuO6aJgFOYpCsGXIt7qPZar7YoXAESk873MFVdZM8x8+YfTZOXb7
wZs04K7uTDbzEhX76oH6R5zeBofLbRQBCwBw4Ex2lkvWCM3LgvyT+cOOBnY/yMIV
628o4ejGmSqC0+f4ZgOepGgD88B1so9/KJzBJZGm+OHzcfeBzNZ5qedgJHCAn+Vc
QNWT4y5cH/rc7/4sCmEGF46lJVW1V++4qVCGWZpDy7TmDGO+BvMtno1TalDSL8sq
M+1HedFRJfqO08jWS0d31+bM+MaXGAgsmp98W4/swojCBvyo/0EPGtHGKxcisWsY
5qa05NOWUHg98kxZeACQ5bke+cNVtg5qK4HVCvJUlnfjcv7+mcYYMQ==
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICgTCCAeoCAQAwDQYJKoZIhvcNAQEEBQAwgYgxCzAJBgNVBAYTAktSMQ8wDQYD
VQQIEwZjbGllbnQxDzANBgNVBAcTBmNsaWVudDEPMA0GA1UEChMGY2xpZW50MQ8w
DQYDVQQLEwZjbGllbnQxDzANBgNVBAMTBmNsaWVudDEkMCIGCSqGSIb3DQEJARYV
amlub29zQGRpbWVjbHViLmNvLmtyMB4XDTAzMDcyMzEwMjA0OFoXDTA0MDcyMjEw
MjA0OFowgYgxCzAJBgNVBAYTAktSMQ8wDQYDVQQIEwZjbGllbnQxDzANBgNVBAcT
BmNsaWVudDEPMA0GA1UEChMGY2xpZW50MQ8wDQYDVQQLEwZjbGllbnQxDzANBgNV
BAMTBmNsaWVudDEkMCIGCSqGSIb3DQEJARYVamlub29zQGRpbWVjbHViLmNvLmty
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCungx5pc8jd0eWXgkqtZR1M9uo
yqZpPwOglovcybbu1e2Wi6qmJMMwkQ4yAGPHO64GxUGadbjQ82BEGL+FEkl5eeCn
Q22bLeVNxVwLsOIWqWJ+wzG6+5HuxJIgj3ExrZryYo6jQKUiUjZF7LznCn/nb+7r
//9DZATcolw80KqfbwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAAr2RmIqNfUtSqF7
yFBHYsRVUA7YjeMbkyZUZBHH0uMzlRnFznmrIiGqcJ1VEUomIf4EnVRCqKQ2kka9
qvhySn8mUC0U4nIvK9TFukHTOIu+qsjzy1rekn36CZGjvloSR1vMFRstY++0x4GY
4EH48nv+8s7mQeBvgl2wg+lmoSYh
-----END CERTIFICATE-----

이렇게 4개의 파일이고 이 4개의 파일이 쓰이는 함수는

dh1024.pem (서버단)
BIO_new_file(dhfile,"r");

root.pem (서버,클라이언트 공용)
SSL_CTX_load_verify_locations(ctx, rootfile, 0);

server.pem, client.pem
SSL_CTX_use_certificate_chain_file(ctx, keyfile);

이렇게 입니다.

dh1024.pem 파일 작성법은 찾았구요, root.pem 파일과 server.pem, client.pem 파일의 작성법을 잘 모르겠습니다. openssl에서 어떤 명령어를 주어야 만들수 있는지 궁금합니다.

mach의 이미지

OpenSSL을 사용하려면 단지 openssl만 설치하는 단계말고,
openssl.conf파일(파일명이 정확한지?)에 세팅을 해주어야 하며,
아울러 CA(Certificate Authority)를 구성해야 합니다.

CA를 구성하는 방법은 인터넷에서 검색해보시고요. (검색어: openssl ca <<이 정도로 나올라나?)
제 기억이 가물가물하지만,
openssl/디렉터리하에 보면 간단하게 CA를 생성해주는 스크립트가 있습니다.
물론 이 쉘스크립트내에서는 openssl명령을 사용하고 있지요.
CA를 생성하면, root키가 생성되고, 서버키 및 클라이언트키 를 생성할 수 있습니다. 소위 root키도 자기자신이 관리하니까 사설 CA라고나 할까요? 공인인증기관이 아니라는 얘기지요.

* 참고: 아파치 +SSL을 설치할때와 아주 유사하다고 볼수있습니다. 그 쪽 관련문서를 참고하셔도 됩니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.