기술면접_HTTP, HTTPS

reggias·2023년 4월 17일
1

기술면접

목록 보기
4/18

HTTP와 HTTPS의 차이점은 무엇인가요?

  • HTTP(HyperText Transfer Protocol)와 HTTPS(HyperText Transfer Protocol Secure)는 인터넷 상에서 정보를 주고받는 데 사용되는 프로토콜입니다. HTTPS의 S는 Secure로 이 둘의 가장 큰 차이점은 보안입니다. HTTP는 암호화되지 않은 텍스트 데이터를 전송하며, 중간자 공격이나 데이터 도난, 변조 등의 보안 이슈가 발생할 수 있습니다. 반면 HTTPS는 HTTP의 보안 버전으로, SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터를 암호화하고 인증하는 과정을 거칩니다. 이를 통해 중간에 제3자가 데이터를 가로채어도 정보를 해독하기 어렵고, 데이터의 무결성을 보장할 수 있습니다. 따라서 HTTPS는 보안이 중요한 정보를 주고받아야 하는 경우에 사용하는 것이 좋습니다. 예를 들어, 인터넷뱅킹, 온라인 결제, 로그인 등의 경우에는 HTTPS를 사용하여 데이터를 보호하는 것이 일반적입니다. 또한, 최근에는 구글 등 검색 엔진에서 HTTPS를 사용하는 사이트를 우선순위로 검색 결과에 노출하는 등 HTTPS 사용이 검색 엔진 최적화에도 중요한 역할을 하고 있습니다. 마지막으로 HTTP에서는 80번 포트를 사용하고 HTTPS에서 사용되는 포트 번호는 443입니다. 하지만 HTTPS는 암호화된 통신을 위해 SSL/TLS 프로토콜을 사용하기 때문에 SSL/TLS 프로토콜이 사용하는 포트 번호도 참고할 수 있습니다. SSL/TLS 프로토콜은 주로 443번 포트를 사용하지만 다른 포트도 사용할 수 있습니다.

HTTPS에서 사용되는 SSL/TLS는 무엇인가요?

  • SSL은 보안 소켓 계층(Secure Sockets Layer) 인증서로 불리며, 브라우저(사용자의 컴퓨터)와 서버(웹사이트) 사이에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술로 해커가 개인 데이터나 금융 데이터 등의 전송되는 정보를 보거나 훔치는 것을 방지합니다. TLS (Transport Layer Security)는 HTTPS에서 사용되는 보안 프로토콜입니다. SSL은 최초로 개발되었으며, 이후 TLS로 대체되었습니다. 둘다 클라이언트와 서버 간 통신을 암호화하고, 인증 및 무결성 검사를 수행하여 보안성을 제공합니다. 이를 통해 중간자 공격 및 데이터 변조를 방지할 수 있습니다. SSL 및 TLS는 대부분의 웹 브라우저와 웹 서버에서 지원되며, SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3 등 다양한 버전이 있고 결제 페이지, 로그인 패널 및 양식, 블로그 및 정보 사이트 등 모든 유형의 정보를 보호할 수 있습니다. 웹사이트가 SSL/TLS 인증서로 보호되는 경우 HTTPS가 URL에 표시됩니다. 사용자는 브라우저 표시줄의 자물쇠 기호를 클릭해 발급 기관 및 웹사이트 소유자의 상호를 포함한 인증서의 세부 정보를 볼 수 있습니다.

HTTPS 동작 과정에 대해서

    1. 클라이언트(웹 브라우저)가 서버에 접속하고 SSL/TLS 연결을 시작합니다. 이를 위해 서버는 클라이언트에게 SSL 인증서를 제공합니다.
    2. 클라이언트는 서버가 제공한 인증서를 검증합니다. 인증서가 신뢰할 수 있는 곳에서 발급되었는지, 인증서의 만료일자가 지나지 않았는지 등을 확인합니다.
    3. 클라이언트는 SSL/TLS 연결을 위해 랜덤한 대칭키를 생성합니다. 이 대칭키는 데이터 암호화및 복호화에 사용됩니다.
    4. 클라이언트는 서버에게 대칭키를 전송하기 위해 공개키 암호화 방식을 사용합니다. 이 때 서버는 자신의 개인키를 사용하여 대칭키를 복호화합니다.
    5. 이후 서버와 클라이언트는 대칭키를 사용하여 데이터를 암호화하고 전송합니다.

HTTPS에서 사용되는 대칭키와 공개키 암호화 방식에 대해 설명해주세요.

  • HTTPS에서는 대칭키와 공개키 암호화 방식을 모두 사용합니다. 먼저, 대칭키 암호화 방식은 서버와 클라이언트가 암호화와 복호화에 같은 비밀키를 사용하는 방식입니다. 이는 데이터 전송 속도가 빠르고 간단한 암호화 방식이지만, 비밀키가 노출될 경우 보안성이 크게 떨어지게 됩니다. 따라서 HTTPS에서는 대칭키 암호화 방식을 사용하여 데이터를 암호화하고, 이 대칭키를 전달하는 과정에서 공개키 암호화 방식을 사용합니다. 공개키 암호화 방식은 서버와 클라이언트가 각각 다른 비밀키를 가지고 있는 방식입니다. 서버는 공개키를 클라이언트에게 제공하고, 클라이언트는 이 공개키를 이용하여 대칭키를 암호화하여 서버에 전달합니다. 서버는 이 암호화된 대칭키를 자신의 개인키로 복호화하여 대칭키를 얻어내고, 이 대칭키를 사용하여 데이터를 암호화합니다. 이 과정에서 중간에 도청자가 끼어들더라도, 공개키로 암호화된 대칭키를 해독할 수 없기 때문에 데이터의 기밀성이 보장됩니다. 또한, 서버 측의 개인키는 서버 외부에서 알 수 없도록 보안적으로 관리되기 때문에 데이터의 무결성과 인증성이 보장됩니다.

HTTPS를 구현하는 방법에 대해서

    1. SSL/TLS 인증서 발급
      HTTPS를 구현하기 위해서는 SSL/TLS 인증서를 발급받아야 합니다. SSL/TLS 인증서는 인증 기관(Certificate Authority)에서 발급해주며, 발급 받은 인증서에는 서버의 정보와 공개키가 포함됩니다.
    2. 웹 서버 구성
      웹 서버에서 HTTPS를 사용하도록 설정해야 합니다. 이를 위해 웹 서버에서 SSL/TLS 프로토콜을 지원하도록 설정하고, 발급받은 SSL/TLS 인증서와 서버의 개인키를 등록해야 합니다.
    3. 클라이언트와의 통신
      클라이언트와의 통신 과정에서는 SSL/TLS 프로토콜을 사용하여 암호화된 통신을 진행합니다. 클라이언트는 서버와 연결을 시도할 때 SSL/TLS 핸드셰이크 과정을 거칩니다. 이 과정에서 서버는 발급받은 인증서를 클라이언트에게 제공하고, 클라이언트는 인증서의 정보를 확인한 후, 서버의 공개키를 사용하여 세션 키를 생성합니다.
    4. 암호화 통신
      클라이언트와 서버는 이후 생성된 세션 키를 사용하여 암호화된 통신을 진행합니다. 이 과정에서 클라이언트와 서버는 서로의 신원을 확인하고, 데이터를 암호화하여 안전하게 전송합니다.

HTTPS를 사용하면서 발생할 수 있는 성능 이슈에 대해서

    1. 암호화/복호화 작업 : HTTPS는 암호화를 사용하여 통신을 보호합니다. 암호화 및 복호화 작업은 CPU를 많이 사용하므로, 작업량이 많아질수록 서버의 성능에 영향을 줄 수 있습니다.

    2. 핸드쉐이크 오버헤드 : HTTPS 연결을 설정하는 과정에서 핸드쉐이크라는 절차를 거치게 됩니다. 이 과정에서 전송되는 데이터양이 많기 때문에, 핸드쉐이크 오버헤드가 발생할 수 있습니다.

    3. 캐시 불가능 : HTTPS에서는 캐시가 불가능합니다. 왜냐하면, 캐시된 데이터가 변조될 가능성이 있기 때문입니다. 따라서, 매번 요청할 때마다 서버에서 새로운 데이터를 가져와야 하므로 성능에 영향을 줄 수 있습니다.

    4. CDN 사용에 제약 : HTTPS 연결을 설정할 때, 도메인 이름이 반드시 일치해야 합니다. 따라서, CDN을 사용하는 경우 도메인 이름이 변경되므로 HTTPS를 사용하기 어렵습니다. 이러한 경우에는 CDN에서 HTTPS를 지원하도록 설정해야 합니다.

      이러한 성능 이슈를 해결하기 위해, 하드웨어 가속 기술을 사용하거나, 암호화 알고리즘을 최적화하는 등의 방법을 사용할 수 있습니다.

위의 성능 이슈를 해결하는 방법

    1. 하드웨어 가속 기술(Hardware Acceleration): HTTPS의 성능 이슈 중에서 가장 대표적인 것은 암호화/복호화 과정에서 발생하는 부하입니다. 이러한 부하를 해결하기 위해 하드웨어 가속 기술을 사용합니다. 하드웨어 가속 기술은 SSL/TLS 암호화/복호화 과정을 CPU 대신 별도의 하드웨어 장치에서 처리함으로써 처리 속도를 향상시킵니다.

    2. 암호화 알고리즘 최적화: HTTPS에서 사용되는 대표적인 암호화 알고리즘으로는 AES, RSA, SHA 등이 있습니다. 이러한 알고리즘들은 성능 향상을 위해 최적화될 수 있습니다. 예를 들어, RSA 알고리즘은 키의 크기에 따라 처리 속도가 크게 달라질 수 있기 때문에 키 크기를 최소화하는 것이 좋습니다.

    3. 캐시: HTTPS의 경우 매번 인증서를 다운로드해야 하기 때문에 초기 연결 시간이 길어질 수 있습니다. 이를 해결하기 위해서는 캐시를 이용해야 합니다. 캐시를 이용하면 인증서를 다운로드하지 않고 기존에 다운로드한 인증서를 사용함으로써 연결 시간을 단축시킬 수 있습니다.

    4. 세션 재사용: HTTPS는 기본적으로 연결마다 새로운 세션을 생성합니다. 이러한 세션 생성 과정은 처리 시간이 오래 걸립니다. 따라서 HTTPS에서는 기존에 생성된 세션을 재사용하는 방법을 이용해 성능을 개선할 수 있습니다.

    5. CDN(Content Delivery Network): HTTPS에서 가장 큰 성능 이슈 중 하나는 지리적으로 떨어진 클라이언트와 서버 간의 지연 시간입니다. 이를 해결하기 위해 CDN(Content Delivery Network)을 이용합니다. CDN은 전 세계에 분산된 캐시 서버를 이용하여 클라이언트와 가까운 서버에서 콘텐츠를 제공함으로써 지연 시간을 최소화합니다.

      앞의 두 가지는 HTTPS의 성능 이슈를 해결하고 동시에 보안성 문제를 높이지 않는 방법이고 뒤의 세 가지는 HTTPS에서 적용이 가능하나 보안성 문제와 관련된 취약점이 존재할 수 있어 충분한 보안 검사가 필요합니다.

HTTPS를 운영하는 서버 측에서 주의해야 할 보안상의 이슈에 대해서

    1. 인증서 유효성 검증: HTTPS를 사용하면 서버는 클라이언트에게 인증서를 제공하여 신뢰성을 보장합니다. 따라서 서버 측에서는 인증서의 유효성을 검증하여 위조된 인증서를 사용한 공격을 방지해야 합니다.
    2. 암호화 강도: HTTPS는 암호화된 통신을 제공하여 데이터의 안정성을 보장합니다. 그러나 암호화 알고리즘의 강도에 따라 보안 수준이 달라질 수 있습니다. 서버 측에서는 보안 수준이 높은 암호화 알고리즘을 사용하여 공격에 대한 대비가 필요합니다.
    3. 취약한 SSL/TLS 버전 사용: 오래된 SSL/TLS 버전은 보안 취약점이 존재하여 공격자가 중간자 공격을 수행할 수 있습니다. 따라서 서버 측에서는 최신 버전의 SSL/TLS 프로토콜을 사용하여 보안 취약점을 방지해야 합니다.
    4. HTTPS 트래픽 감시: HTTPS 통신은 암호화되어 있기 때문에 보안 검사나 감시가 어렵습니다. 하지만 일부 악성코드는 HTTPS 트래픽을 통해 악성코드를 전파하거나 민감한 정보를 수집하는 등의 공격을 수행합니다. 따라서 서버 측에서는 HTTPS 트래픽을 감시하고 이상한 패턴을 탐지할 수 있는 시스템을 구축해야 합니다.
profile
sparkle

0개의 댓글