SSL(보안 소켓 계층, Secure Sockets Layer)과 TLS(전송 계층 보안, Transport Layer Security)는 인터넷에서 데이터를 안전하게 전송하기 위한 암호화 프로토콜로, TLS는 SSL의 발전된 버전이며, 현재는 TLS가 표준으로 사용됩니다.
SSL/TLS 핸드셰이크는 클라이언트와 서버 간의 초기 통신 과정으로, 세션 키를 생성하고 서로를 인증하는데 사용됩니다.
공통적으로 인증기관(CA)에서 SSL 인증서를 발급받아야 합니다. 추가로 Let's Encrypt와 같은 무료 CA를 사용할 수도 있습니다.
인증서 파일은 .crt(인증서), .key(비공개 키), .pem(인증서 체인) 파일이 제공됩니다.
sudo a2enmod ssl
/etc/apache2/sites-available/__.conf 파일을 열어 수정합니다. 파일 위치와 이름은 사용자의 프로젝트 구조에 맞춰서 작성
<VirtualHost *:443>
ServerAdmin webmaster@your-site.com
ServerName your-site.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/your-site.crt
SSLCertificateKeyFile /etc/ssl/private/your-site.key
SSLCertificateChainFile /etc/ssl/certs/chain.pem
<Directory /var/www/html>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
sudo a2ensite your-site
sudo systemctl restart apache2
/etc/nginx/sites-available/your-site 파일을 열어 수정합니다.
server {
listen 443 ssl;
server_name your-site.com;
ssl_certificate /etc/ssl/certs/your-site.crt;
ssl_certificate_key /etc/ssl/private/your-site.key;
ssl_trusted_certificate /etc/ssl/certs/chain.pem;
location / {
root /var/www/html;
index index.html index.htm;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
server {
listen 80;
server_name your-site.com;
return 301 https://$host$request_uri;
}
sudo systemctl restart nginx
npm install https fs
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const options = {
key: fs.readFileSync('/path/to/your-site.key'),
cert: fs.readFileSync('/path/to/your-site.crt'),
ca: fs.readFileSync('/path/to/chain.pem')
};
app.get('/', (req, res) => {
res.send('Hello, world!');
});
https.createServer(options, app).listen(443, () => {
console.log('HTTPS Server running on port 443');
});
node server.js