1. 루트 인증서 생성
2. 루트에 종속된 도메인 인증서 생성
openssl genrsa -out ca.key 2048
chmod 600 ca.key
-aes256 옵션은 패스워드 입력 필요
[ req ]
default_bits = 2048
default_md = sha1
default_keyfile = ca.key
distinguished_name = req_distinguished_name
extensions = v3_ca
req_extensions = v3_ca
[ v3_ca ]
basicConstraints = critical, CA:TRUE, pathlen:0
subjectKeyIdentifier = hash
##authorityKeyIdentifier = keyid:always, issuer:always
keyUsage = keyCertSign, cRLSign
nsCertType = sslCA, emailCA, objCA
[req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = KR
countryName_min = 2
countryName_max = 2
# 회사명 입력
organizationName = Organization Name (eg, company)
organizationName_default = DDIMTECH
# 부서 입력
#organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default = Solution Technology Team
# SSL 서비스할 domain 명 입력
commonName = Common Name (eg, your name or your server's hostname)
commonName_default = scvit self signed CA
commonName_max = 64
openssl req -new -key ca.key -out ca.csr -config ca.conf
Country Name (2 letter code) [KR]:
Organization Name (eg, company) [DDIMTECH]:
Common Name (eg, your name or your servers hostname) [scvit self signed CA]:
그냥 엔터 치면 Default 값 ( [KR], [DDIMTECH] 등) 이 입력됨.
openssl x509 -req -days 3650 \
-extensions v3_ca \
-set_serial 1 \
-in ca.csr \
-signkey ca.key \
-out ca.crt \
-extfile ca.conf
openssl x509 -text -in ca.crt
...
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
...
openssl genrsa -out only.key 2048
chmod 600 only.key
[ req ]
default_bits = 2048
default_md = sha1
default_keyfile = ca.key
distinguished_name = req_distinguished_name
extensions = v3_user
[ v3_user ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
authorityKeyIdentifier = keyid,issuer
subjectKeyIdentifier = hash
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
## SSL 용 확장키 필드
extendedKeyUsage = serverAuth,clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = <도메인 입력>
[req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = KR
countryName_min = 2
countryName_max = 2
# 회사명 입력
organizationName = Organization Name (eg, company)
organizationName_default = DDIMTECH
# 부서 입력
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Solution Technology Team
# SSL 서비스할 domain 명 입력
commonName = Common Name (eg, your name or your server's hostname)
commonName_default = <도메인 입력>
commonName_max = 64
[alt_names]와 commonnName_default 에 도메인주소 입력
openssl req -new -key only.key -out only.csr -config only.conf
Country Name (2 letter code) [KR]:
Organization Name (eg, company) [DDIMTECH]:
Organizational Unit Name (eg, section) [Solution Technology Team]:
Common Name (eg, your name or your servers hostname) [*.ddimtech.com]: # 필요한 도메인 주소 입력
openssl x509 -req -days 365 -extensions v3_user -in only.csr -CA ca.crt -CAcreateserial -CAkey ca.key -out only.crt -extfile only.conf
openssl x509 -text -in only.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
67:a3:75:70:f3:de:e1:c4:23:ec:55:a1:b6:75:c4:76:b0:84:32:23
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = KR, O = DDIMTECH, CN = scvit self signed CA
Validity
Not Before: Jul 28 05:56:57 2023 GMT
Not After : Jul 27 05:56:57 2024 GMT
Subject: C = KR, O = DDIMTECH, OU = Solution Technology Team, CN = *.ddimtech.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
참고
openssl 버전 확인 및 업그레이드
# openssl 현재 버전 확인 openssl version # openssl 설치 위치 확인 which openssl # /usr/bin/openssl # OpenSSL 지원 프로토콜 확인 openssl ciphers -v | awk '{print $2}' | sort | uniq # 현재 버전 openssl 삭제(하지말고 다른 디렉토리로 이동시키자) # yum -y remove openssl # 기본 라이브러리 설치 yum -y install gcc gcc-c++ perl pcre-devel zlib-devel wget # 다운로드 및 소스 컴파일 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar xvfz openssl-1.1.1k.tar.gz cd openssl-1.1.1k/ ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib make && make install # make && make install 안되면 따로 실행 # sudo make # sudo make install # 새로운 파일 생성하여 아래 한줄 추가하고 저장(:wq)한다. (라이브러리 등록) vi /etc/ld.so.conf.d/openssl-1.1.1k.conf /usr/local/ssl/lib # 동적 링크 생성 ldconfig -v ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 # 기존 openssl 이름 변경 mv /usr/bin/openssl /usr/bin/openssl1.0.2k # 새로 설치한 버전 심볼릭 링크 생성 ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl # 업데이트된 버전 확인 openssl version
- pem 파일 변환
# key 파일 변환 openssl rsa -in only.key -text > key.pem # crt 파일 변환 openssl x509 -inform PEM -in only.crt > crt.pem
JKS to pem
https://mystria.github.io/archivers/get-pem-from-keystore
keytool -importkeystore \ -srckeystore keystore.jks \ -destkeystore keystore.p12 \ -deststoretype PKCS12
인증서
openssl pkcs12 -in keystore.p12 -out certificates.pem
- 키
openssl pkcs12 -in keystore.p12 -nodes -nocerts -out key.pem
공감하며 읽었습니다. 좋은 글 감사드립니다.