ubuntu openssl 설치 및 사용법
🤷🏻♀️ 간략설명 - 요약
설치
sudo apt update
sudo apt-get install openssl
인증서 생성
# 개인 키(mykey.key)와 공개 키가 포함된 인증서(mycert.crt) 생성
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem
# 혹은 -subj 추가해서 생성
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem -subj "/CN=myapp.com/O=myapp"
# ex)
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem -subj "/C=KR/ST=Seoul/L=Seoul/O={조직명}/OU={부서명}/CN={사이트주소}/emailAddress={이메일주소}"
-x509: 자체 서명된 인증서를 생성하라는 것을 명시합니다.
-nodes: 암호로 보호된 개인 키를 생성하지 않도록 합니다(No DES).
-days 365: 인증서가 유효할 일수를 설정합니다.
-newkey rsa:2048: 새로운 RSA 키를 생성하고 키의 크기를 2048 비트로 설정합니다.
-keyout: 생성된 개인 키를 저장할 파일의 이름을 지정합니다.
-out: 생성된 인증서를 저장할 파일의 이름을 지정합니다.
-subj: 인증서에 포함될 정보를 명시적으로 제공합니다. 여기서는 일반적으로 도메인 이름을 나타내는 CN(Common Name)과 조직을 나타내는 O(Organization)를 포함합니다.
여기서 각 약어는 다음과 같은 의미를 가진다.
C = Country Name
ST = State or Province Name
L = Locality Name (보통 도시 이름)
O = Organization Name
OU = Organizational Unit Name
CN = Common Name (FQDN - Fully Qualified Domain Name)
emailAddress = 이메일 주소
인증서 생성시 입력할 내용
Country Name (2 letter code) [AU]:KR
State or Province Name (full name) [Some-State]:Seoul
Locality Name (eg, city) []:Seoul
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Seoul
Organizational Unit Name (eg, section) []:Seoul
Common Name (e.g. server FQDN or YOUR name) []:Seoul
Email Address []:Seoul
#설명
Country Name (2 letter code): 국가 코드를 입력합니다. 예를 들어, 미국은 "US", 한국은 "KR"입니다.
State or Province Name (full name): 주 또는 도 이름을 입력합니다.
Locality Name (eg, city): 도시 이름을 입력합니다.
Organization Name (eg, company): 조직 또는 회사의 이름을 입력합니다.
Organizational Unit Name (eg, section): 조직의 부서나 섹션 이름을 입력합니다. 선택 사항이므로 엔터 키를 누르고 넘어갈 수 있습니다.
Common Name (eg, fully qualified host name): 인증서를 사용할 도메인 이름이나 IP 주소를 입력합니다. 여기서는 도메인 없이 IP 주소만 사용하려고 하므로, 원하는 IP 주소를 입력합니다.
Email Address: 이메일 주소를 입력합니다. 선택 사항이므로 엔터 키를 누르고 넘어갈 수 있습니다.
인증서 확인
```bash
openssl x509 -text -noout -in cert.crt # 혹은 cert.pem
openssl rsa -check -in key.key # 혹은 key.pem
```
nginx 설정
nginx 설정 파일 수정
sudo apt install nginx
sudo nano /etc/nginx/sites-available/default
server {
listen 443 ssl;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
}
Docker에서 -v 를 통한 인증서 사용
docker run -d -p 443:443 -v /etc/ssl/certs/nginx-selfsigned.crt:/etc/ssl/certs/nginx-selfsigned.crt -v /etc/ssl/private/nginx-selfsigned.key:/etc/ssl/private/nginx-selfsigned.key nginx
docker run -d -p 5001:5001 -v /path/to/cert.pem:/app/cert.pem -v /path/to/key.pem:/app/key.pem grpc-service
Example
WORKDIR /app
EXPOSE 5163
EXPOSE 7101
var certPath = "./etc/ssl/certs/server.crt";
var keyPath = "./etc/ssl/private/server.key";
Answer
docker run -d -p 5163:5163 -p 7101:7101 -v /path/to/cert.pem:/app/etc/ssl/certs/server.crt -v /path/to/key.pem:/app/etc/ssl/private/server.key grpc-service
🤷🏻♀️ 상세 설명
버전 확인
openssl version
사용법
openssl [command] [options]
명령어
- genrsa : RSA 개인키 생성
- req : 인증서 요청
- x509 : 인증서 생성
- pkcs12 : 인증서와 개인키를 하나의 파일로 생성
- rsa : RSA 암호화
- rsautl : RSA 암호화/복호화
- rand : 난수 생성
- enc : 대칭키 암호화/복호화
- dgst : 해시값 생성
- dhparam : DH 파라미터 생성
- dh : DH 키 생성
- dsaparam : DSA 파라미터 생성
- dsaparam : DSA 키 생성
- ecparam : EC 파라미터 생성
- ec : EC 키 생성
명령어 옵션
- -help : 도움말
- -in : 입력 파일
- -out : 출력 파일
- -text : 인증서 내용 확인
- -noout : 출력하지 않음
- -pubout : 공개키 출력
- -pubin : 공개키 입력
- -passin : 비밀번호 입력
- -passout : 비밀번호 출력
- -des : DES 대칭키 암호화
- -des3 : 3DES 대칭키 암호화
- -aes128 : AES 128 대칭키 암호화
- -aes192 : AES 192 대칭키 암호화
- -aes256 : AES 256 대칭키 암호화
- -md5 : MD5 해시값 생성
- -sha1 : SHA1 해시값 생성
- -sha256 : SHA256 해시값 생성
- -sha512 : SHA512 해시값 생성
- -engine : 암호화 엔진 지정
- -paramfile : 파라미터 파일 지정
- -param_enc : 파라미터 암호화 방식 지정
- -param_out : 파라미터 출력 파일 지정
- -param_in : 파라미터 입력 파일 지정
- -C : 국가명
- -ST : 주/도
- -L : 시/군/구
- -O : 회사명
- -OU : 부서명
- -CN : 도메인명
- -emailAddress : 이메일 주소
- -days : 인증서 유효기간
- -newkey : 새로운 키 생성
- -new : 새로운 인증서 생성
- -key : 개인키 파일 지정
- -keyform : 개인키 형식 지정
- -keyout : 개인키 출력 파일 지정
- -keyin : 개인키 입력 파일 지정
- -CA : CA 인증서 파일 지정
- -CAkey : CA 개인키 파일 지정
- -CAcreateserial : 시리얼 파일 생성
- -CAserial : 시리얼 파일 지정
- -CAform : CA 인증서 형식 지정
- -CAkeyform : CA 개인키 형식 지정
- -CAkeyout : CA 개인키 출력 파일 지정
- -CAkeyin : CA 개인키 입력 파일 지정
- -CAserial : 시리얼 파일 지정
- -CAcreateserial : 시리얼 파일 생성
명령어 예제
- RSA 개인키 생성
openssl genrsa -out private.pem 2048
- 인증서 요청
openssl req -new -key private.pem -out public.csr
- 인증서 생성
openssl x509 -req -days 365 -in public.csr -signkey private.pem -out public.crt
- 인증서와 개인키를 하나의 파일로 생성
openssl pkcs12 -export -clcerts -in public.crt -inkey private.pem -out public.pfx
- RSA 암호화
openssl rsa -in private.pem -pubout -out public.pub
- RSA 암호화/복호화
openssl rsautl -encrypt -inkey public.pub -pubin -in plain.txt -out cipher.txt
openssl rsautl -decrypt -inkey private.pem -in cipher.txt -out plain.txt
- 대칭키 암호화/복호화
openssl enc -e -des3 -in plain.txt -out cipher.txt -pass pass:password
openssl enc -d -des3 -in cipher.txt -out plain.txt -pass pass:password
- 해시값 생성
openssl dgst -md5 plain.txt
openssl dgst -sha1 plain.txt
openssl dgst -sha256 plain.txt
openssl dgst -sha512 plain.txt
- DH 파라미터 생성
openssl dhparam -out dhparam.pem 2048
- DH 키 생성
openssl dhparam -in dhparam.pem -text -noout
openssl dhparam -in dhparam.pem -check
- DSA 파라미터 생성
openssl dsaparam -out dsaparam.pem 2048
- DSA 키 생성
openssl dsaparam -in dsaparam.pem -text -noout
openssl dsaparam -in dsaparam.pem -check
- EC 파라미터 생성
openssl ecparam -out ecparam.pem -name prime256v1
- EC 키 생성
openssl ecparam -in ecparam.pem -text -noout
openssl ecparam -in ecparam.pem -check
- 인증서 내용 확인
openssl x509 -in public.crt -text -noout
- 인증서 유효기간 확인
openssl x509 -in public.crt -noout -dates
- 인증서 유효성 확인
openssl verify -CAfile public.crt public.crt
Note: 만들고나니 내것이 아니었다.
Leave a comment