ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

HTTP ์™„๋ฒฝ๊ฐ€์ด๋“œ 14์žฅ Secure HTTP๋ฅผ ์ฝ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

HTTP๋ž€ hypertext transfer protocol

http://๋„๋ฉ”์ธ ←๋„๋ฉ”์ธ์— ํ•ด๋‹น๋˜๋Š” ์ปดํ“จํ„ฐ์™€ ํ†ต์‹ ์„ ํ•˜๊ณ ์ž ํ•˜๋Š”๋ฐ http ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

์‚ฌ๋žŒ๋“ค์€ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ.

→๊ธฐ๋ณธ์ ์ธ ์ธ์ฆ ์ธ๊ฐ€ ์™ธ ๋ณด์•ˆ์ด ํ•„์š”

 

๊ทธ๋ž˜์„œ ๋‚˜์˜จ๊ฒŒ HTTPS. (S๋Š” over secure socket layer์˜ ์•ฝ์ž)

๋ณด์•ˆ ์žฅ์น˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Œ.

 

HTTPS๋Š”

  1. req & res data is encrypted.
  2. SSL(Secure Sockets Layer) ๋˜๋Š” TLS(Transport Layer Security)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ๊ธฐ๋ฐ˜์˜ ์•”ํ˜ธํ™”๋œ ๋ณด์•ˆ ๊ณ„์ธต transports-level ์„ ์ œ๊ณต

 

์•”ํ˜ธํ™”

ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„๋ณผ ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ณผ์ •

 

์•”ํ˜ธํ‚ค

ํ‚ค๊ฐ’์— ๋”ฐ๋ผ ์•”ํ˜ธํ™” ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ฌ๋ผ์ง.

 

๋Œ€์นญํ‚ค(symmetric-key)

  • ์ˆ˜์‹ ์ž์™€ ๋ฐœ์‹ ์ž ๋ชจ๋‘ ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉ
  • ์ธ์ฝ”๋”ฉ ๋””์ฝ”๋”ฉ ๋ชจ๋‘ ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉ
  • ๊ณต์œ ํ‚ค ์„ค์ • (Establishing Shared Keys)
    • ๋Œ€์นญํ‚ค๋Š” ์ˆ˜์‹ ์ž์™€ ๋ฐœ์‹ ์ž๊ฐ€ ํ†ต์‹ ํ•˜๊ธฐ ์ด์ „์— ๊ณต์œ ๋œ ๋น„๋ฐ€ํ‚ค๋ฅผ ๊ฐ€์ ธ์•ผํ•จ.
    • N๋ช…์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์‹œ ์„œ๋ฒ„์—์„œ N๊ฐœ์˜ key๋ฅผ ๋ณด์œ ํ•ด์•ผํ•จ.
    • ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ์ง€๊ฐ€ ์•Š์Œ. → ๋น„๋Œ€์นญํ‚ค๋กœ ํ•ด๊ฒฐ

 

๋น„๋Œ€์นญํ‚ค(asymmetric keys) - encoding๊ณผ decoding์‹œ ์„œ๋กœ๋‹ค๋ฅธ key ์‚ฌ์šฉ

  • ์•”ํ˜ธํ™”ํ•  ๋•Œ๋Š” ๊ณต๊ฐœํ‚ค (ํด๋ผ์ด์–ธํŠธ → ์„œ๋ฒ„)
  • ๋ณตํ˜ธํ™”ํ•  ๋•Œ๋Š” ๋น„๋ฐ€ํ‚ค (์„œ๋ฒ„)

 

 

RSA - ๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์•”ํ˜ธํ™”๋œ ํ…์ŠคํŠธ์™€ ๊ณต๊ฐœํ‚ค๋กœ ๋น„๋ฐ€ํ‚ค๋ฅผ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์—†๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง.
  • Ron Rivest, Adi Shamir, Leonard Adleman ์„ธ ์‚ฌ๋žŒ์˜ ์„ฑ์„ ๋”ฐ์„œ ๋„ค์ด๋ฐ.
  • ์ „์„ธ๊ณ„ ๋Œ€๋ถ€๋ถ„์˜ ์ธํ„ฐ๋„ท ๋ฑ…ํ‚น์—์„œ RSA-2048์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค

 

๊ทธ ์™ธ ์ถ”๊ฐ€์ ์ธ ์ธ์ฆ ์ˆ˜๋‹จ

 

์„œ๋ช…(Signatures)

  • ์•”ํ˜ธ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„ธ์ง€์— ์„œ๋ช…ํ•˜๊ณ  ์กฐ์ž‘๋˜์ง€ ์•Š์•˜์Œ์„ ์ฆ๋ช…
  • ์„œ๋ช…์„ ํ†ตํ•ด ๋ณธ์ธ์„ ์ฆ๋ช…

๋””์ง€ํ„ธ ์ธ์ฆ์„œ(Digital Certificates)

  • X.509 v3 ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์ €์žฅ
  • ์›น ์„œ๋ฒ„ ์ธ์ฆ์„œ, ํด๋ผ์ด์–ธํŠธ ์ „์ž ๋ฉ”์ผ ์ธ์ฆ์„œ, ์†Œํ”„ํŠธ์›จ์–ด ์ฝ”๋“œ ์„œ๋ช… ์ธ์ฆ์„œ, ์ธ์ฆ ๊ธฐ๊ด€ ์ธ์ฆ์„œ ๋“ฑ์— ์‚ฌ์šฉ

 

HTTPS Schemes

  1. HTTP ์ผ ๊ฒฝ์šฐ
    1. 80 ํฌํŠธ๋กœ ์—ฐ๊ฒฐ
  2. HTTPS ์ผ ๊ฒฝ์šฐ
    1. 443 ํฌํŠธ๋กœ ์—ฐ๊ฒฐ
    2. ์„œ๋ฒ„์™€ handshakes - SSL ์ธ์ฆ์„œ ๊ตํ™˜

 

HTTPS์—์„œ ์ „์†ก ๋‹จ๊ณ„

  1. ํด๋ผ์ด์–ธํŠธ๋Š” 443 ํฌํŠธ(๋ณด์•ˆ HTTP์˜ ๊ธฐ๋ณธ ํฌํŠธ)์— ์—ฐ๊ฒฐ
  2. TCP๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ SSL ๊ณ„์ธต ์ดˆ๊ธฐํ™” ํ›„ ํ‚ค๋ฅผ ๊ตํ™˜ (handshake)
  3. ๊ตํ™˜ํ•œ ํ‚ค๋กœ ์•”ํ˜ธํ™” ์ž‘์—…
  4. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด์•ˆ ๊ณ„์ธต์œผ๋กœ request ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก
  5. TCP disconnect

 

 

handshake

  1. ์•”ํ˜ธ ์„ ํƒ
  2. ID ์ธ์ฆ
  3. ์ฑ„๋„ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ ์ž„์‹œ ์„ธ์…˜ ํ‚ค ์ƒ์„ฑ

 

 

Server Certificates

  1. HTTPS ์ „์†ก ์‹œ ํ•ญ์ƒ ํ•„์š”
  2. ์‹ ์šฉ์นด๋“œ ์ •๋ณด์™€ ๊ฐ™์€ ๋ณด์•ˆ์ „์†ก
  3. ์กฐ์ง์˜ ์ด๋ฆ„, ์ฃผ์†Œ, ์„œ๋ฒ„ DNS ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋ฐ ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” X.509 v3์—์„œ ํŒŒ์ƒ๋œ ์ธ์ฆ์„œ

 

 

Site Certificate Validation

๋ธŒ๋ผ์šฐ์ € ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ๊ฒ€์ฆ 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•

  1. ์ธ์ฆ์„œ ๋งŒ๋ฃŒ ์ผ์ž ํ™•์ธ
  2. ์ธ์ฆ๊ธฐ๊ด€(eg. CA)์œผ๋กœ๋ถ€ํ„ฐ์˜ ์„œ๋ช… ํ™•์ธ
  3. ์„œ๋ช… ๊ถŒํ•œ์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋‹จ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” ์„œ๋ช… ๊ถŒํ•œ์˜ ๊ณต์šฉ ํ‚ค๋ฅผ ์„œ๋ช…์— ์ ์šฉ
  4. ์ธ์ฆ์„œ์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ํ†ต์‹ ํ•œ ์„œ๋ฒ„์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

 

Virtual Hosting and Certificates

์„œ๋ฒ„ ์ธ์ฆ์„œ์— ๋‚˜์—ด๋œ ๊ณต์‹ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ํ•œ ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

๋„๋ฉ”์ธ ์ฃผ์†Œ๊ฐ€ www.naver.com ์ธ๋ฐ https://www.naver.com ๋ฅผ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ

→ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์œผ๋กœ ํ•ด๊ฒฐํ•ด์ค˜์•ผ ํ•จ.

 

 

Open SSL

/*************************************************************


  • https_client.c --- very simple HTTPS client with no error checking
  • usage: https_client servername

  • *******/

#include <stdio.h> #include <memory.h> #include <errno.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h>

#include <openssl/crypto.h> #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/err.h>

void main(int argc, char **argv) { SSL *ssl; SSL_CTX *ctx; SSL_METHOD *client_method; X509 *server_cert; int sd,err; char *str,*hostname,outbuf[4096],inbuf[4096],host_header[512]; struct hostent *host_entry; struct sockaddr_in server_socket_address; struct in_addr ip;

/========================================/ /* (1) initialize SSL library / /========================================*/

SSLeay_add_ssl_algorithms( ); client_method = SSLv2_client_method( ); SSL_load_error_strings( ); ctx = SSL_CTX_new(client_method);

printf("(1) SSL context initialized\n\n");

/=============================================/ /* (2) convert server hostname into IP address / /=============================================*/

hostname = argv[1]; host_entry = gethostbyname(hostname); bcopy(host_entry->h_addr, &(ip.s_addr), host_entry-

 

h_length);

 

printf("(2) '%s' has IP address '%s'\n\n", hostname, inet_ntoa(ip));

/=================================================/ /* (3) open a TCP connection to port 443 on server / /=================================================*/

sd = socket (AF_INET, SOCK_STREAM, 0);

memset(&server_socket_address, '\0', sizeof(server_socket_address)); server_socket_address.sin_family = AF_INET; server_socket_address.sin_port = htons(443); memcpy(&(server_socket_address.sin_addr.s_addr), host_entry->h_addr, host_entry->h_length);

err = connect(sd, (struct sockaddr*) &server_socket_address, sizeof(server_socket_address)); if (err < 0) { perror("can't connect to server port"); exit(1); }

printf("(3) TCP connection open to host '%s', port %d\n\n", hostname, server_socket_address.sin_port);

/*======================================================== / / (4) initiate the SSL handshake over the TCP connection */

/========================================================/

ssl = SSL_new(ctx); /* create SSL stack endpoint / SSL_set_fd(ssl, sd); / attach SSL stack to socket / err = SSL_connect(ssl); / initiate SSL handshake */

printf("(4) SSL endpoint created & handshake completed\n\n");

/============================================/ /* (5) print out the negotiated cipher chosen / /============================================*/

printf("(5) SSL connected with cipher: %s\n\n", SSL_get_cipher(ssl));

/========================================/ /* (6) print out the server's certificate / /========================================*/

server_cert = SSL_get_peer_certificate(ssl);

printf("(6) server's certificate was received:\n\n");

str = X509_NAME_oneline(X509_get_subject_name(server_cert), 0, 0); printf(" subject: %s\n", str);

str = X509_NAME_oneline(X509_get_issuer_name(server_cert), 0, 0); printf(" issuer: %s\n\n", str);

/* certificate verification would happen here */

X509_free(server_cert);

/********************************************************* / /* (7) handshake complete --- send HTTP request over SSL */

/*********************************************************/

sprintf(host_header,"Host: %s:443\r\n",hostname); strcpy(outbuf,"GET / HTTP/1.0\r\n"); strcat(outbuf,host_header); strcat(outbuf,"Connection: close\r\n"); strcat(outbuf,"\r\n");

err = SSL_write(ssl, outbuf, strlen(outbuf)); shutdown (sd, 1); /* send EOF to server */

printf("(7) sent HTTP request over encrypted channel:\n\n%s\n",outbuf);

// /* (8) read back HTTP response from the SSL stack */ //

err = SSL_read(ssl, inbuf, sizeof(inbuf) - 1); inbuf[err] = '\0'; printf ("(8) got back %d bytes of HTTP response:\n\n%s\n",err,inbuf);

// / (9) all done, so close connection & clean up / //

SSL_shutdown(ssl); close (sd); SSL_free (ssl); SSL_CTX_free (ctx);

printf("(9) all done, cleaned up and closed connection\n\n");

 

ํ”„๋กœ๊ทธ๋žจ ์„น์…˜์„ ์„น์…˜๋ณ„๋กœ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

  • ํ”„๋กœ๊ทธ๋žจ ์ƒ๋‹จ์—๋Š” TCP ๋„คํŠธ์›Œํ‚น ๋ฐ SSL์„ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ง€์› ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„น์…˜ 1์€ ํ•ธ๋“œ์…ฐ์ดํฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ์ถ”์ ํ•˜๋Š” ๋กœ์ปฌ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

SSL_CTX_new๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ SSL ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • ์„น์…˜ 2๋Š” ์ž…๋ ฅ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„(๋ช…๋ น์ค„ ์ธ์ˆ˜๋กœ ์ œ๊ณต)์„ IP๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค

์ด๋ฆ„๋ณ„ ์œ ๋‹‰์Šค gethost ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์†Œ. ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์ด ์‹œ์„ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ์„น์…˜ 3์€ ๋กœ์ปฌ ์†Œ์ผ“์„ ์ƒ์„ฑํ•˜์—ฌ ์„œ๋ฒ„์˜ ํฌํŠธ 443์— ๋Œ€ํ•œ TCP ์—ฐ๊ฒฐ์„ ์—ฝ๋‹ˆ๋‹ค

์›๊ฒฉ ์ฃผ์†Œ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์›๊ฒฉ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • TCP ์—ฐ๊ฒฐ์ด ์„ค์ •๋˜๋ฉด SSL ๊ณ„์ธต์„ TCP ์—ฐ๊ฒฐ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค

SSL_new ๋ฐ SSL_set_fd๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์™€์˜ SSL ํ•ธ๋“œ์…ฐ์ดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค

SSL_connect. ์„น์…˜ 4๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” SSL ์ฑ„๋„์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค

์•”ํ˜ธ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ธ์ฆ์„œ๋ฅผ ๊ตํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์„น์…˜ 5๋Š” ์„ ํƒํ•œ ๋Œ€๋Ÿ‰ ์•”ํ˜ธํ™” ์•”ํ˜ธ์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์„น์…˜ 6์€ ๋‹ค์Œ์—์„œ ๋ณด๋‚ธ X.509 ์ธ์ฆ์„œ์— ํฌํ•จ๋œ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค

์ธ์ฆ์„œ ์†Œ์œ ์ž ๋ฐ ๋ฐœ๊ธ‰ํ•œ ์กฐ์ง์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ์„œ๋ฒ„

์ฆ์„œ. OpenSSL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน๋ณ„ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์„œ๋ฒ„ ์ธ์ฆ์„œ. ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ๊ฐ™์€ ์‹ค์ œ SSL ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ œ์ •์‹ ์ด ์•„๋‹ˆ๋‹ค

์ธ์ฆ์„œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„œ๋ช…๋˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ํ˜ธ์ŠคํŠธ์—์„œ ์™”๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€

14.7.6์—์„œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„ ์ธ์ฆ์„œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ์‹œ์ ์—์„œ SSL ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„น์…˜ 7์—์„œ, ์šฐ๋ฆฌ๋Š”

SSL_write๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSL ์ฑ„๋„์„ ํ†ตํ•ด ๋‹จ์ˆœ HTTP ์š”์ฒญ "GET / HTTP/1.0"์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค,

๊ทธ๋Ÿฐ ๋‹ค์Œ ์—ฐ๊ฒฐ์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ์ ˆ๋ฐ˜์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

  • ์„น์…˜ 8์—์„œ๋Š” SSL_read๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ์—์„œ ์‘๋‹ต์„ ๋‹ค์‹œ ์ฝ๊ณ  ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค

์Šคํฌ๋ฆฐ. SSL ๊ณ„์ธต์ด ๋ชจ๋“  ์•”ํ˜ธํ™” ๋ฐ ์•”ํ˜ธ ํ•ด๋…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์ผ๋ฐ˜ HTTP ๋ช…๋ น์„ ์“ฐ๊ณ  ์ฝ์Šต๋‹ˆ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์„น์…˜ 9์—์„œ ์ฒญ์†Œํ•ฉ๋‹ˆ๋‹ค.

 

 

ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ ํŠธ๋ž˜ํ”ฝ ํ„ฐ๋„๋ง

์•”ํ˜ธํ™” ์ž‘์—… ์‹œ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฌธ์ œ์ 

→ ๊ณต์šฉํ‚ค๋กœ ์•”ํ˜ธํ™”๋œ ํ—ค๋” ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋ก์‹œ๊ฐ€ ์ฝ์„ ์ˆ˜ ์—†์Œ.

 

 

HTTPS SSL ํ„ฐ๋„๋ง ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐ

  1. ํด๋ผ์ด์–ธํŠธ๋Š” ๋จผ์ € ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
  2. ์•”ํ˜ธํ™”๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „์— ํ”„๋ก์‹œ๊ฐ€ ์ด ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. HTTP๋Š” CONNECT๋ผ๋Š” ์ƒˆ๋กœ์šด ํ™•์žฅ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ฐ˜ ํ…์ŠคํŠธ end point ์ •๋ณด๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  4. CONNECT ๋Š” ํ”„๋ก์‹œ์— ์›ํ•˜๋Š” ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์—ด๊ณ  ์—ฐ๊ฒฐ์ด ์™„๋ฃŒ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ํ„ฐ๋„๋งํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.
  5. CONNECT ๋ฉ”์„œ๋“œ๋Š” ๋ณด์•ˆ ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ํฌํŠธ๋ฅผ ์ฝœ๋ก (:)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ํ•œ ์ค„ ํ…์ŠคํŠธ ๋ช…๋ น์ž…๋‹ˆ๋‹ค
  6. host:port ๋’ค์—๋Š” ๊ณต๋ฐฑ๊ณผ HTTP ๋ฒ„์ „์ด, CRLF ๋’ค์—๋Š” 0๊ฐœ ์ด์ƒ์˜ HTTP ์š”์ฒญ ํ—ค๋” ํ–‰์ด, ๋นˆ ํ–‰์ด ์ฐจ๋ก€๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๋นˆ ์ค„ ์ดํ›„์— ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ํ•ธ๋“œ์…ฐ์ดํฌ๊ฐ€ ์„ฑ๊ณตํ•˜๋ฉด SSL ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  7. ํ”„๋ก์‹œ๋Š” ์š”์ฒญ์ด ์œ ํšจํ•œ์ง€, ์‚ฌ์šฉ์ž ์—ฐ๊ฒฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ res 200 ๋ฐ˜ํ™˜
๋Œ“๊ธ€