본문 바로가기
  • " 집요함 "
  • " 집요함 "
  • " 집요함 "
웹/백엔드 서버

SSL 프로토콜 & SSL 설치

by joen00 2022. 4. 26.

SSL 프로토콜

  • SSL/ STTPS
  1. SSL은 암호화 프로토콜이다.
  2. HTTPS = HTTP + SSL. 즉 ,암호화된 웹 통신

 

  • SSL의 중요한 이유
  1. 보안적으로 우수하다
  2. 안드로이드 플랫폼 같은 경우는 HTTP를 더 이상 지원하지 않음
  3. 적용이 안되면 SEO 점수에서 매우 큰 하락폭을 가져온다.
    1. SEO ⇒ search 엔진 검색

 

  • SSL의 구성

SSL의 프로토콜을 구성하기 위해서 3개의 파일이 온다.

  1. Public Key (서버에서 오는 것)
  2. Private Key (고객이 보내는 것)
  3. CA ⇒ 인증 협회? public key를 믿어도 된다 라고 인증해주는 것, ca에서 발행한 것과 인증키와 다르면 애초에 발행을 안 해준다. (회사의 정보, 구입한 정보가 들어간다.)

비대칭 키 암호화 방식 : 1로 암호화하고 2로 복호화 하는 것

 

  • 무료로 해주는 곳 : Letsencrypt
    • 장점 : 성능 좋고 보안 우수
    • 단점 : 무조건 도메인 보유, 90일 마다 무조건 갱신, 멀티 도메인 x 따라서 도메인 별로 발급 받아야 한다.

 

  • 연습할 수 있는 곳 OpenSSL 패키지 - Public Key, Private Key만 있음

 

 

SSL 설치

** putty ubuntu와 node.js에서 하고 있음

 

1. 현재 프로젝트를 하고있는 폴더에 SSL 폴더 하나 만들기

2. ssl 폴더로 들어가기

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out  cert.pem -days 365

위 명령어 입력하기

- key.pem이란 public key를 의미하고 cert.pem이란 private key를 의미한다. 

- openssl req -x509는 어떤 키 구조인지를 의미한다. 

- 4096은 대표적인 4키로바이트를 의미한다. 

위 명령어를 입력하면 비밀번호 입력칸과 정보를 적는 칸이 나오고 정보를 적으면 된다.

 

3. AWS에서 포트 열기 - 원하는 포트로 

 

4. server.js 

//파일 import할때 쓰는 것
const fs=require("fs")
const https=require("https")
const sslport = 8433
// 프로토콜마다 포트가 정해져있어서 https의 포트는 430이다.
// 80은 관리자권한밖에 없다.
// 430번도 관리자권한밖에 없다

// 파일 import
const options={
    "key" : fs.readFileSync(__dirname + "/ssl/key.pem"),
    "cert" : fs.readFileSync(__dirname + "/ssl/cert.pem"),
    "passphrase" : "내가 지정한 비밀번호",
}

// ssl사용 : *모든 api 경로 지정하기
app.get("*",(req,res,next)=>{
    const protocol=req.protocol // http, https
    if(protocol=="https") {
        next() // 이거 종료시키고 밑으로 내려가겠다
    }
    else{
        // 경로 바꾸기
        const destination ="https://"+req.hostname+":8443"+req.url
        res.redirect(destination);
    }
})

// https 통신 열어주기
https.createServer(options,app).listen(sslport, ()=>{
    console.log(`${sslport}번 포트에서 https 통신 시작`)
})
728x90

댓글