Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

임베디드 하드웨어/Interface

HTTPS Root Certificate 다운로드 및 코드 적용 방법

방피터 2017. 6. 27. 17:52

본 글은 HTTPS를 위한 Root certificate를 코드에 적용시키는 방법에 대한 글입니다.


Embedded SSL을 하다보니 자질구래한 일들이 꽤 많습니다. 그 중 하나가 바로 Certificate입니다. Certificate는 글자 그대로 인증서입니다. 모든 HTTPS 서버는 인증서를 가지고 있습니다. 그리고 그 인증서를 인증해주는 상위 인증서들이 있습니다. 맨 꼭대기에 위치해 있는 인증서가 바로 Root certificate이고 이 Root certificate는 시만텍 등 세계적인 보안기업들이 관리하고 있지요.


SSL을 하려면 이 인증서가 필요한데요 Server에 SSL을 적용하려면 돈을 내고 상위 인증기관으로부터 인증서를 발급받아야 하는데 ㅎㅎㅎ 당연하겠지만 돈이 필요합니다. 그럼 Client는 어떻게 할까요? 대부분의 경우에는 자체 인증서 발급이 필요가 없습니다. 하지만 접속하려는 SSL 서버의 Root 인증서가 필요합니다. 왜냐하면 내가 접속하려는 서버가 진짜 내가 접속하려는 서버가 맞는지 확인을 하기 위함입니다. 흔히들 그런 가짜 서버를 피싱서버/피싱사이트라고 부르죠 ㅎㅎ


Embedded SSL에도 가짜 서버/진짜 서버를 구현하기 위해 Root certificate가 필요합니다.(반드시 필요한 것은 아닙니다. 그리고 제 기억으로는 Root 인증서가 아니어도 차상위 인증서여도 체킹이 가능하다고 알고 있는데 오래되서 잘 기억이... 확실하게  확인 후에 포스팅을 수정토록 하겠습니다. 죄송.) 그러려면 certificate를 embedded system에 코드 형태로 내장해야 합니다. 그 방법을 이 포스팅에서 설명하려고 합니다.


!!!mbedTLS 기준입니다.!!!


1. Certificate는 어디서 찾는가?

바로 브라우져에서 다운로드 받을 수 있습니다. 예를 들어 https://twitter.com/의 경우를 보겠습니다.


가. chrome으로 트위터에 접속합니다.



나. F12 key를 눌러 개발자 모드로 바꾼 후 Security tap을 선택합니다.



다. View certificate를 클릭하면 나타나는 인증서 팝업창에서 인증 경로 탭을 선택합니다.



라. 가장 위에 있는 인증서를 선택 후 더블 클릭하면 해당 인증서의 팝업창이 나타납니다.



2. Certificate는 어떻게 다운로드 받는가?


가. 인증서 팝업창에서 "자세히" 탭으로 이동하여 파일에 복사 버튼을 클릭합니다.



다. 인증서 내보내기 마법사가 시작되면 다음을 클릭합니다.



라. Base64 형식을 선택 후 다음을 클릭합니다.



마. 찾아보기를 클릭하여 원하는 위치에 원하는 이름으로 인증서를 저장합니다.



3. Certificate를 code에 넣기!


가. Certificate를 메모장으로 open합니다.



나. certificate.h와 같은 header 파일을 하나 만들어 복사하여 붙여넣기 합니다.


다. 변수 선언 하고 각 행의 끝에 개행문자를 삽입합니다. ( 다음 코드 참고!)

const char	api_twitter_com[] =	\
"-----BEGIN CERTIFICATE-----\r\n"  \
"MIIF7DCCBNSgAwIBAgIQbsx6pacDIAm4zrz06VLUkTANBgkqhkiG9w0BAQUFADCB\r\n"  \
"yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\r\n"  \
"ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\r\n"  \
"U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\r\n"  \
"ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\r\n"  \
"aG9yaXR5IC0gRzUwHhcNMTAwMjA4MDAwMDAwWhcNMjAwMjA3MjM1OTU5WjCBtTEL\r\n"  \
"MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\r\n"  \
"ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2UgYXQg\r\n"  \
"aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykxMDEvMC0GA1UEAxMmVmVy\r\n"  \
"aVNpZ24gQ2xhc3MgMyBTZWN1cmUgU2VydmVyIENBIC0gRzMwggEiMA0GCSqGSIb3\r\n"  \
"DQEBAQUAA4IBDwAwggEKAoIBAQCxh4QfwgxF9byrJZenraI+nLr2wTm4i8rCrFbG\r\n"  \
"5btljkRPTc5v7QlK1K9OEJxoiy6Ve4mbE8riNDTB81vzSXtig0iBdNGIeGwCU/m8\r\n"  \
"f0MmV1gzgzszChew0E6RJK2GfWQS3HRKNKEdCuqWHQsV/KNLO85jiND4LQyUhhDK\r\n"  \
"tpo9yus3nABINYYpUHjoRWPNGUFP9ZXse5jUxHGzUL4os4+guVOc9cosI6n9FAbo\r\n"  \
"GLSa6Dxugf3kzTU2s1HTaewSulZub5tXxYsU5w7HnO1KVGrJTcW/EbGuHGeBy0RV\r\n"  \
"M5l/JJs/U0V/hhrzPPptf4H1uErT9YU3HLWm0AnkGHs4TvoPAgMBAAGjggHfMIIB\r\n"  \
"2zA0BggrBgEFBQcBAQQoMCYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLnZlcmlz\r\n"  \
"aWduLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEAMHAGA1UdIARpMGcwZQYLYIZIAYb4\r\n"  \
"RQEHFwMwVjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL2Nw\r\n"  \
"czAqBggrBgEFBQcCAjAeGhxodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhMDQG\r\n"  \
"A1UdHwQtMCswKaAnoCWGI2h0dHA6Ly9jcmwudmVyaXNpZ24uY29tL3BjYTMtZzUu\r\n"  \
"Y3JsMA4GA1UdDwEB/wQEAwIBBjBtBggrBgEFBQcBDARhMF+hXaBbMFkwVzBVFglp\r\n"  \
"bWFnZS9naWYwITAfMAcGBSsOAwIaBBSP5dMahqyNjmvDz4Bq1EgYLHsZLjAlFiNo\r\n"  \
"dHRwOi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvLmdpZjAoBgNVHREEITAfpB0w\r\n"  \
"GzEZMBcGA1UEAxMQVmVyaVNpZ25NUEtJLTItNjAdBgNVHQ4EFgQUDURcFlNEwYJ+\r\n"  \
"HSCrJfQBY9i+eaUwHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJ\r\n"  \
"KoZIhvcNAQEFBQADggEBAAyDJO/dwwzZWJz+NrbrioBL0aP3nfPMU++CnqOh5pfB\r\n"  \
"WJ11bOAdG0z60cEtBcDqbrIicFXZIDNAMwfCZYP6j0M3m+oOmmxw7vacgDvZN/R6\r\n"  \
"bezQGH1JSsqZxxkoor7YdyT3hSaGbYcFQEFn0Sc67dxIHSLNCwuLvPSxe/20majp\r\n"  \
"dirhGi2HbnTTiN0eIsbfFrYrghQKlFzyUOyvzv9iNw2tZdMGQVPtAhTItVgooazg\r\n"  \
"W+yzf5VK+wPIrSbb5mZ4EkrZn0L74ZjmQoObj49nJOhhGbXdzbULJgWOw27EyHW4\r\n"  \
"Rs/iGAZeqa6ogZpHFt4MKGwlJ7net4RYxh84HqTEy2Y=\r\n"  \
"-----END CERTIFICATE-----\r\n";


쉽지요? 다른 사이트의 인증서도 위와 같은 방식으로 다운로드 후 code에 적용할 수 있습니다.


수고하셔요~~

반응형