SSL 적용에 대한 의문점..

nomail의 이미지

개인서버에 ssl을 올리고 잘 동작하는 것까지 마쳤는데요.
한가지 의문점이 있어서 여쭤봅니다.
우선 pki 개념은 정확히 이해하고 있습니다.

개인서버의 경우에 인증서 비용때문에 self signed 방식으로 자체인증서를 생성한다고 하는데요. 저도 그렇게 했습니다.

openssl genrsa -des3 -out mykey.pem 2048
openssl req -new -key mykey.pem -out server.csr
openssl x509 -req -in server.csr -signkey mykey.pem -days 730 -out server.crt
 
혹은
openssl req -x509 -newkey rsa:2048 -nodes -days 730 -keyout server.crt -out server.crt

위처럼 csr을 자체적으로 사인해서 인증서를 생성한 경우에..
서버에 있는 개인키로 인증서를 암호화하는데 클라이언트는 어떻게 공개키를 찾아 복호화를 하는 건가요?

글 쓰면서 확인해보니 위에서 생성한 server.crt에 mykey.pem의 공개키가 존재하는데요.. 그럼 이 공개키로 복호화 하나요?
그렇게 되면 ssl의 의미가 없어지는데.. 그럼 자체적으로 사인한 인증서는 mitm과 같은 위험이 있다는 건지요??

yukariko의 이미지

공개키는 암호화하는 용도이지 복호화 하는 용도가 아닙니다.
공개키는 말 그대로 서로에게 공개하는 키입니다. 만약 공개되는 키로 복호화가 된다면 그것이야 말로 의미가 없어지는거겠죠..
서버가 클라이언트에게 공개키를 보내주면, 클라이언트는 그 공개키로 암호화를 수행하여 서버에 암호문을 보내고, 서버는 받은 암호문을 비밀키를 통해 복호화 하여 원문을 볼 수 있게 됩니다.

nomail의 이미지

네 말씀 고맙습니다. 설명을 들어보니 제가 ssl개념이 부족했던 것 같습니다.
제가 이해한 내용은 CA기관을 통해서 인증서를 발급받은 경우에, CA의 개인키로 서버정보와 서버의 공개키가 암호화되어 있고
이 인증서를 클라이언트에게 보내면 클라이언트는 CA의 공개키로 복호화 한 후에 검증이 되면 서버공개키로 랜덤 생성한 대칭키를 암호화 하고
그 암호를 서버에 보내면 서버는 자신의 개인키로 복호화가 되므로 그때부터 대칭키로 암호화 통신이 되는걸로 이해했는데요.
그래서 self signed 인증서의 경우에는 클라이언트가 어떻게 공개키를 찾을 수 있는지 여쭤본겁니다 ^^;

그런데 생각해보니 서버의 공개키는 말 그대로 공개된 내용이니 (또는 ca의 공개키로 누구나 인증서를 복호화 가능하므로) 숨길 이유가 없고
그렇다면 처음에 클라이언트와 통신이 시작할 때 ca인증서와 서버의 공개키를 클라이언트에게 보내는 거로 이해가 되는데.. 정확히 맞는지요?

만약 그렇다면 self signed 인증서의 경우에는 클라이언트에서 검증을 생략하고 전송받은 공개키로 대칭키를 암호화하여 서버에 전송하고
그 이후 암호화 통신이 이뤄지는 건가요?

yukariko의 이미지

제가 알고있는건 RSA 공개키 암호에 대한것이고, SSL 정책에 대해선 자세히 모르겠네요. 죄송합니다.
그에 관한 답변은 다른분들이 해주실겁니다.

nomail의 이미지

아닙니다. 덕분에 개념을 정립하는데 좀더 도움이 되었습니다^^

yhsuk의 이미지

대부분 잘 알고 계신데, 용어는 변경하셔야 할 필요가 있겠습니다.
제가 아는 선에서만 말씀 드리겠습니다.

인증서에는 인증서 정보와 함께 공개키가 들어 있으며,
CA기관이 하는 것은 서버의 인증서에 대해 CA의 개인키로 서명(Sign)을 해주는 것입니다
(개인키로 하는 것은 보통 암호화라고 하지 않습니다. 쓰이는 용도가 다르고, 사용되는 함수도 다릅니다)
신뢰하는 CA기관의 인증서에 포함된 CA기관의 공개키로 서버 인증서의 서명을 확인(Verify) 해서 성공하면, 서버 인증서를 신뢰하는 것이구요.

보통 self-signed 인증서를 사용하는 url을 브라우져로 탐색하면 신뢰할 수 있는 root CA 인증기관을 찾을 수 없기 때문에, 신뢰할 수 없다고 나오게 됩니다.
self-signed 인증서를 클라이언트 컴퓨터에 신뢰하는 root ca인증기관으로 설치하면, 비로소 해당 클라이언트 컴퓨터에서만 페이지를 경고 없이 확인할 수 있습니다.

Signature :) - "여유를 갖고 행동하되 게을러지지 말자"

nomail의 이미지

설명해 주셔서 고맙습니다.
제가 잘못 알고있었던게 맞네요. (구글링 해보면 인증서를 CA개인키로 암호화 한다고 대부분 설명을 해놔서..ㅎㅎ)
말씀대로 인증서에는 CA의 개인키 서명과 서버정보, 공개키가 오픈된게 맞는 것 같습니다.
정신차리고 다시 확인해보니

openssl x509 -in server.crt -text

서버의 공개키와, 서버정보, 인증서명이 이제 보입니다. 이걸 왜 몰랐을까 싶네요..ㅜ.ㅜ

댓글 달기

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