SSL/TLS 인증서는 웹 사이트의 보안을 강화하는 역할을 하며, 데이터 전송 시 암호화를 제공합니다. 인증서 발급은 여러 방식으로 이루어질 수 있으며, 상황에 따라 적합한 방법을 선택할 수 있습니다:
무료 인증서 발급 기관:
유료 인증서 발급 기관:
개발용 자체 서명 인증서:
기업용 내부 CA:
인증서를 선택할 때는 웹사이트의 용도, 필요한 보안 수준, 예산 등을 고려하여 적합한 옵션을 선택해야 합니다. 인증서를 설치하고 구성하는 과정은 사용하는 웹 서버와 설정에 따라 다를 수 있으므로, 관련 문서를 참조하거나 전문가의 도움을 받는 것이 좋습니다.
Let's Encrypt에서 SSL/TLS 인증서를 발급받고 인증하는 가장 일반적이고 편리한 방법은 Certbot 같은 ACME(Automated Certificate Management Environment) 클라이언트를 사용하는 것입니다. 이 방법은 인증서 생성, 설치, 갱신을 자동화합니다. 아래는 Certbot을 사용하여 Let's Encrypt 인증서를 발급받고 인증하는 단계입니다.
Certbot은 대부분의 리눅스 배포판의 패키지 저장소에 포함되어 있습니다. 설치 방법은 사용하는 시스템의 종류에 따라 다릅니다. 예를 들어, Ubuntu 시스템에서는 다음 명령으로 Certbot을 설치할 수 있습니다:
sudo apt-get update
sudo apt-get install certbot python3-certbot-apache
다른 시스템에서의 설치 방법은 Certbot 공식 웹사이트에서 확인할 수 있습니다.
Certbot을 사용하여 인증서를 발급받으려면 다음 명령을 실행합니다. 이 예제에서는 Apache 웹 서버를 사용한다고 가정합니다. 다른 웹 서버를 사용하는 경우 python3-certbot-apache
대신 python3-certbot-nginx
등 적절한 플러그인을 설치해야 합니다.
sudo certbot --apache
이 명령은 자동으로 웹 서버를 구성하여 SSL/TLS 인증서를 사용하도록 설정합니다. 도메인 이름과 관련된 질문에 답하고, 이메일 주소를 입력하여 통신을 받을 수 있습니다.
도메인의 DNS 설정이 이미 올바르게 구성되어 있어야 하며, Certbot은 도메인 소유권을 확인하기 위해 웹 서버에 임시 파일을 생성합니다.
Certbot은 자동 갱신을 위한 cronjob 또는 systemd timer를 설치합니다. 인증서는 90일마다 갱신되어야 하며, Certbot은 이를 자동으로 처리합니다. 갱신이 제대로 작동하는지 확인하기 위해 다음 명령을 실행할 수 있습니다:
sudo certbot renew --dry-run
이 명령은 실제로 인증서를 갱신하지는 않지만, 갱신 프로세스가 제대로 작동하는지 테스트합니다.
이제 Let's Encrypt에서 SSL/TLS 인증서를 발급받고 웹 서버에 적용하는 과정을 완료했습니다. 웹 서버가 HTTPS를 통해 안전하게 통신할 수 있도록 설정되었습니다.
로컬 호스트(localhost)에 대해서는 Let's Encrypt와 같은 공인된 인증 기관(CA)에서 SSL/TLS 인증서를 직접 발급받는 것이 불가능합니다. 이는 로컬 호스트가 일반적으로 개발 목적으로 사용되며, 외부에서 접근할 수 없는 로컬 네트워크 내에서만 존재하기 때문입니다. 공인된 인증 기관은 인터넷 상에서 유효하고 식별 가능한 도메인 이름에 대해서만 인증서를 발급합니다.
로컬 개발 환경에서 HTTPS를 사용하고 싶은 경우, 다음과 같은 방법을 고려할 수 있습니다:
자체 서명된 인증서(Self-Signed Certificate) 사용: 자체 서명된 인증서를 생성하여 로컬 서버에 설치할 수 있습니다. 이 방법은 브라우저에서 "신뢰할 수 없는 연결" 경고를 발생시키지만, 개발 환경에서 HTTPS 연결을 테스트하는 데 사용할 수 있습니다.
mkcert 사용: mkcert는 로컬 개발을 위해 자체 서명된 인증서를 쉽게 만들 수 있는 도구입니다. mkcert를 사용하면 브라우저가 신뢰하는 인증서를 생성할 수 있어 "신뢰할 수 없는 연결" 경고 없이 로컬 HTTPS 서버를 실행할 수 있습니다.
ngrok 또는 유사 서비스 사용: ngrok과 같은 서비스를 사용하면 로컬 개발 서버를 안전하게 인터넷에 노출시킬 수 있습니다. 이러한 서비스는 공인된 인증서를 사용하여 외부에서 로컬 서버에 안전하게 액세스할 수 있는 기능을 제공합니다.
로컬 개발 환경에서 HTTPS를 설정하고 싶다면, 자체 서명된 인증서 생성 또는 mkcert 사용을 추천합니다. 실제 제품 환경에서는 항상 공인된 인증 기관에서 발급받은 인증서를 사용해야 합니다.
Windows에서 OpenSSL을 설치하는 공식적인 방법은 없습니다. 하지만, pre-compiled binaries를 다운로드해서 사용할 수 있습니다. OpenSSL 공식 홈페이지나 Win32/Win64 OpenSSL에서 다운로드 할 수 있습니다. 설치 후, 시스템 환경 변수에 OpenSSL의 bin 디렉토리를 추가해야 할 수 있습니다.
macOS 대부분의 버전에는 OpenSSL이 사전 설치되어 있지만, 업데이트된 버전을 사용하고 싶다면 Homebrew를 사용하는 것이 좋습니다. 아직 Homebrew를 설치하지 않았다면, 먼저 Homebrew를 설치해야 합니다. 그 후, 터미널에서 다음 명령어를 실행하세요.
brew install openssl
Linux 배포판에 따라 OpenSSL 설치 명령어가 조금씩 다릅니다. 아래는 가장 일반적인 배포판에 대한 설치 명령어입니다.
sudo apt-get update
sudo apt-get install openssl
CentOS 8 이상 버전부터는 OpenSSL이 기본적으로 설치되어 있습니다. 그러나 업데이트가 필요하거나 확인이 필요한 경우 다음 명령어를 사용하십시오.
sudo yum install openssl
sudo dnf install openssl
설치 후, 다음 명령어를 사용하여 OpenSSL이 제대로 설치되었는지 확인할 수 있습니다.
openssl version
개인키 생성
openssl genpkey -algorithm RSA -out private.key
명령어를 사용하여 개인키(private.key
)를 생성합니다.자체 서명 인증서 생성
openssl req -x509 -sha256 -days 365 -key private.key -out selfsigned.crt
명령어를 사용합니다.-x509
옵션은 자체 서명 인증서를 생성하겠다는 것을 의미하며, -days
옵션으로 인증서의 유효 기간을 설정할 수 있습니다.You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:kr
State or Province Name (full name) [Some-State]:Gyeongsangbuk-do
Locality Name (eg, city) []:Gyeongju
Organization Name (eg, company) [Internet Widgits Pty Ltd]:student
Organizational Unit Name (eg, section) []:student
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:a82727282@gmail.com
자체 서명 인증서는 쉽게 생성할 수 있고 비용이 들지 않지만, 외부 사용자나 시스템에서는 신뢰도가 낮습니다. 주로 내부적인 테스트 환경이나 개발 과정에서 사용됩니다.
개인키 생성
openssl genpkey -algorithm RSA -out private.key
명령어를 사용하여 개인키(private.key
)를 생성합니다.CSR(Certificate Signing Request) 생성
openssl req -new -key private.key -out request.csr
명령어를 사용합니다.CSR을 CA에 제출하여 인증서 서명 받기
생성한 CSR 파일(request.csr
)을 CA에 제출합니다.
CA는 CSR의 정보를 검증한 후, 해당 정보를 포함한 인증서를 서명해서 발급해줍니다.
이 과정은 CA에 따라 웹 인터페이스나 이메일을 통해 진행될 수 있습니다.
사용자가 생성한 CSR을 사용하여 Let's Encrypt로부터 인증서를 발급받기 위해서는, ACME 프로토콜을 직접 지원하는 다른 클라이언트를 사용하거나, Certbot의 --csr 옵션을 사용할 수 있습니다. 그러나, --csr 옵션을 사용할 때는 Certbot이 인증서 갱신을 자동으로 관리하지 않으므로, 인증서 갱신이 필요할 때마다 이 과정을 반복해야 합니다. 예를 들어, Certbot을 사용하여 사용자가 생성한 CSR로 인증서를 발급받는 명령어는 다음과 같습니다.
certbot certonly --manual --preferred-challenges=dns --csr path/to/your/request.csr
이 명령어는 --manual 옵션을 사용하여 DNS 레코드를 통한 수동 검증 방식을 선택하고, --preferred-challenges=dns 옵션으로 DNS 챌린지를 명시하며, --csr 옵션으로 CSR 파일의 경로를 지정합니다.
CA로부터 받은 인증서 저장
CA를 통해 서명받은 인증서는 외부 사용자와 시스템에서 신뢰도가 높으며, SSL/TLS 인증서, 이메일 서명, 코드 서명 등 다양한 용도로 사용됩니다. 인증서의 신뢰도와 보안을 위해, 특히 공개 서비스에는 CA를 통한 인증서 사용이 권장됩니다.