openssl 을 이용한 프로그래밍에서..
미리 진문의 요를 말씀드리겠습니다.
소스에 들어있는 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에서 어떤 명령어를 주어야 만들수 있는지 궁금합니다.
OpenSSL을 사용하려면 단지 openssl만 설치하는 단계말고,
OpenSSL을 사용하려면 단지 openssl만 설치하는 단계말고,
openssl.conf파일(파일명이 정확한지?)에 세팅을 해주어야 하며,
아울러 CA(Certificate Authority)를 구성해야 합니다.
CA를 구성하는 방법은 인터넷에서 검색해보시고요. (검색어: openssl ca <<이 정도로 나올라나?)
제 기억이 가물가물하지만,
openssl/디렉터리하에 보면 간단하게 CA를 생성해주는 스크립트가 있습니다.
물론 이 쉘스크립트내에서는 openssl명령을 사용하고 있지요.
CA를 생성하면, root키가 생성되고, 서버키 및 클라이언트키 를 생성할 수 있습니다. 소위 root키도 자기자신이 관리하니까 사설 CA라고나 할까요? 공인인증기관이 아니라는 얘기지요.
* 참고: 아파치 +SSL을 설치할때와 아주 유사하다고 볼수있습니다. 그 쪽 관련문서를 참고하셔도 됩니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기