[OS] SSL/TLS

hugingstar·2026년 2월 20일

Operating system

목록 보기
34/34
post-thumbnail

SSL(Secure Socket Layer)은 웹 서버와 브라우저 사이에서 전송되는 데이터를 암호화하여 보안을 유지하기 위한 표준 보안 기술이다.

  • SSL은 1995년에 Netscape사에서 개발하였다. 하지만 취약점이 발견되어서, 현재는 거의 사용하지 않는다.

  • 현재는 TLS(Transport Layer Security)로 대체되었지만, 여전히 SSL라고 부른다.

  • TLS는 1999sus IETF에 의해 표준화되었다. 강력한 암호화 알고리즘을 사용하기 때문에 현재 표준으로 사용되고 있다.

  • TCP 443 포트를 사용한다.

Application layer : 사용자가 직접 접하는 서비스 프로토콜로 https://, ftps://를 사용한다. s가 뒤에 붙어서 암호화된 상태로 통신하는 것을 의미한다.
SSL은 응용 계층에서 내려온 평문 데이터를 TCP 계층으로 보내기전에 암호화한 후, https://의 경우 443 포트를 사용한다.
Transport layer :

SSL 예제

CA 10.17.0.180
DNS 10.17.0.181
WEB 10.17.0.182
Window client 10.17.0.183

hostnamectl set-hostname rootCA
hostnamectl set-hostname dns
hostnamectl set-hostname web

DNS

  • dns에서 configuration을 설정하고 DNS를 만들어준다.
# 패키지 설치
dnf install -y bind bind-chroot

# dns configuration
vi /etc/named.conf

# zone file
vi /etc/named.rfc1912.zones
>> yslee.ke 도메인을 추가한다.

# dns 파일 복사본 
cd /var/named/
cp -p named.localhost yslee.ke.dns

# dns 파일
vi yslee.ke.dns

$TTL 1D
@       IN SOA  ns1.yslee.ke. rocky.yslee.ke. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN NS   ns1.yslee.ke.
        

        IN A    10.17.0.182
ns1     IN A    10.17.0.181
www     IN A    10.17.0.182

#named dns 파일 체크
named-checkzone yslee.ke /var/named/yslee.ke.dns

# name 파일을 적용
systemctl restart named

WEB

  • web으로 넘어가서 httpd 설정을 해준다.
dnf install -y httpd

# 실행
systemctl enable --now httpd

# 정적 파일 생성
echo "www.yslee.ke" > /var/www/html/index.html

# localhost 도메인 확인
curl localhost

Win10 Client

  • IP를 설정하고 WEB으로 ping이 가는지 확인한다.
  • DNS를 10.17.0.181로 설정

  • 이름 설정, 작업 그룹 상태를 확인한다.
sysdm.cpl

  • 엣지에서 접속 확인

CA

  • 10.17.0.180으로 생성해 둔 CA에서 작업한다.
dnf install -y openssl

  • rootCA의 Private key를 생성한다.
  • genrsa : Private key 생성 알고리즘을 RSA 알고리즘으로 한다.
  • -des3 : (-aes256) Private key를 암호화 할 알고리즘 선택
  • out : key 파일 생성 경로 (생성 이름)
  • 2048 : Private key의 bits size
  • 비밀번호를 입력하고 key를 생성한다.
openssl genrsa -des3 -out rootCA.key 2048
> 비밀번호 입력하여 생성

# 확인
ll

# 인증서를 놓을 폴더 생성
mkdir cert_dir

# 생성한 인증서 이동
mv rootCA.key cert_dir/
cd cert_dir/

  • 인증서 생성 과정을 보면서 값을 설정한다. pem 파일을 생성하는 과정으로서, 국가, 지역, 기관 등 정보를 입력한다.
# Key 생성
genrsa -des3 -out rootCA.key 2048

# 설정
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 365 -out rootCA.pem

  • rootCA.pem -> rootCA.crt : pem 파일을 crt로 변환하여 만든다.
  • WebServer용 Private Key 생성
  • WebServer용 인증서 생성을 위한 신청서 생성
# pem > crt
openssl x509 -outform der -in rootCA.pem -out rootCA.crt

# 웹서버용 Private key
openssl genrsa -out yslee.ke.key 2048

# Private Key(WebServer용)을 기반으로 신청서(csr : certified sign request) 생성
openssl req -new -key yslee.ke.key -out yslee.ke.csr

  • SAN(Subject Alternative Name)

  • SSL/TLS 인증서에 여러 도메인 이름(IP 주소)를 포함할 수 있게 해주는 필드이다.

  • 대부분의 최신 브라우저에서는 Common Name(CN) 필드만 설정된 인증서는 신뢰하지 않고 SAN 필드가 설정된 인증서를 신뢰한다.

  • yslee.ke.ext 파일을 생성한다.

 vi yslee.ke.ext
 
 # 작성한 내용
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 =yslee.ke

  • WebServer용 인증서 생성 (v3의 확장 기능 추가)
  • OK 사인이 보여야 한다.
#인증서 생성
openssl x509 -req -in yslee.ke.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out yslee.ke.crt -days 365 -sha256 -extfile yslee.ke.ext

  • WebServer용 인증서 정보 확인
# 인증서 정보 확인
openssl x509 -in yslee.ke.crt -text -noout

  • CA 최종 결과물 리스트

  • scp를 사용해서 10.17.0.182로 파일을 보낸다.
  • 10.17.0.182로 갈려고한다.
scp yslee.ke.crt root@10.17.0.182:/root
scp yslee.ke.key root@10.17.0.182:/root

  • 보안 설정 : ssl 관련해서 configure 파일이 설치되어 있다.
dnf install -y mod_ssl

# 설치된 파일 확인
vi /etc/httpd/conf.d

  • ssl.conf 파일을 백업본을 복사해둔다.
cd /etc/httpd/conf.d/
ls

# 백업본
cp ssl.conf ssl.conf.bak

# ssl 파일 수정
ssl.conf

# 작성한 내용 (원래 있던것 모두 지우고 VirtualHost 사용)

  1 Listen 443
  2
  3 <VirtualHost *:443>
  4         ServerName yslee.ke
  5         DocumentRoot /var/www/html
  6         SSLEngine On
  7         SSLCertificateFile /etc/pki/tls/certs/yslee.ke.crt
  8         SSLCertificateKeyFile /etc/pki/tls/private/yslee.ke.key
  9         Serveradmin yslee
 10         ErrorLog logs/ssl_yslee_ke_errorlog
 11         CustomLog logs/ssl_yslee_ke_log common
 12 </VirtualHost>
~

# 복사 인증서(.crt), 사설키(.key)
cp ~/yslee.ke.crt /etc/pki/tls/certs/yslee.ke.crt

cp ~/yslee.ke.key /etc/pki/tls/private/yslee.ke.key

# 재시작
systemctl restart httpd

  • 443번 포트가 활성화 되어 있는 것 확인한다.
netstat -antp

  • Win10 Client에서 접속해보면 안전하지 않음이라고 나오지만 https가 적용되었다. 발급 날짜, 만료 날짜 등을 확인할 수 있다.

SSL 통신과정

  1. TCP 3way-Handshake
  2. Client Hello
    • Random number
    • 사용할 수 있는 암호화 알고리즘 목록
    • SSl/TLS 버전
  3. Server
    • 인증서 준비 (crt)
  4. Server Hello
    • 인증서
    • Random number
    • Client가 보낸 목록 중 사용할 알고리즘
  5. Client (이 부분이 되어야 안전하지 않음 메시지가 안뜬다.)
    • 인증서 유효성 검증 : CA 인증서
    • Server의 공개키로 A(Client에서 생성한)를 암호화하여 Server로 전송
  6. Server
    • Client가 보낸 암호화된 A를 자신(Server)의 개인키로 복호화
    • Server도 B라는 대칭키를 만들고 A(Client의 대칭키)로 암호화
    • 암호화된 B를 Client로 전송
  7. Client
    • Server가 보낸 B를 자신의 대칭키(A)로 복호화

Session Key로 통신

  • 4번 과정을 Win10 클라이언트에서 진행해서 안전하지 않음 메시지가 뜨지 않도록 해본다.
  • scp는 파일을 보내기도 하지만, 가져오는 것도 한다.
scp root@10.17.0.180:/root/cert_dir/rootCA.crt .

  • rootCA를 더블클릭해서 인증서 저장소 선택으로 들어간다.
  • '신뢰할 수 있는 루트 인증 기관'을 선택한다.

  • '예'를 눌러서 가져오기를 완료한다.

  • 웹 브라우저에서 오른쪽 위에 ...>설정>'인증서 관리' 검색 >'가져오기'버튼 클릭> 인증서 가져오기 마법사 > 바탕화면에 있는 인증서 등록

  • ke라는 파일이 들어있다.

  • '연결이 안전합니다.' 메시지가 보인다.

Redirect

  • httpd가 켜져있는
  • 80 번으로 오는 모든 요청을 443으로 Redirect한다.

WEB

  • 10.17.0.182에서 virtualhost.conf 파일 생성하고 Redirect 설정 문구를 작성한다.
# 파일 생성
vi virtualhost.conf


# 작성한 내용
<VirtualHost *:80>
        ServerName yslee.ke
        Redirect / https://yslee.ke
</VirtualHost>

# httpd 재시작
systemctl restart httpd
http://yslee.ke

비교

0개의 댓글