💡 핵심 요약 (Executive Summary)
본 가이드는 cm sec openssl 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.
TLS
Sample
Show
특정 TLS포트에서 인증서 정보 가져오기
bash
ip=
port=
openssl s_client -connect ${ip}:${port} -showcerts
Main
Reference & Guidelines (NOTE)
CA인증서가 만료되더라도, 만료 전에 서명하였다면 해당 인증서는 유효하다.
즉, CA 10년일 경우라도 클라이언트 인증서 100년후 갱신으로 서명 가능.
subCommand & flags
bash
#sub-command
openssl genrsa # rsa 개인키 생성
openssl genpkey # 개인키 생성
openssl rsa # rsa 개인키 작업
openssl req # CSR 작업
openssl x509 # 인증서 작업
#flags
-in ${file} # 파일 입력
-out ${file} # 파일 출력
-outform ${type} # 출력 타입 지정
-noout # 파일 출력 하지 않음
-text # 표준출력?
-aes256 # 개인키 암호화하여 보안계층 추가
-nodes # No DES : (Enter PEM pass phrase: 입력란)암호 없이 실행
조회
sql
# 인증기간 확인
sudo openssl x509 -in ${crt} -noout -text
# csr 내용 조회
sudo openssl req -in ${csr} -noout -text
# 유효성 체크
sudo openssl verify -CAfile ${ca.crt} ${target.crt}
to PEM file
bash
# crt to pem
sudo openssl x509 -inform PEM -in ca.crt > public.pem
# key to pem
sudo openssl rsa -in ca.key -text > private.pem
feature
key=ecparam
bash
#루트인증서
openssl ecparam -out rootca.key -name prime256v1 -genkey
openssl req -new -sha256 -key rootca.key -out rootca.csr -subj "/C=KR/L=Seoul/O=fredric/CN=fredrics.playground"
openssl x509 -req -sha256 -days 3650 -in rootca.csr -signkey rootca.key -out rootca.crt
#서버인증서
openssl ecparam -out server.key -name prime256v1 -genkey
openssl req -new -sha256 -key server.key -out server.csr -subj "/C=KR/L=Seoul/O=fredric/CN=*.fredric.playground.cld"
openssl x509 -req -sha256 -days 3650 -in server.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server.crt
#서버인증서 정보 출력
openssl x509 -in server.crt -text -noout
#루트인증서와 서버인증서를 모두 포함하는 pem파일 제작
cat server.crt rootac.crt > server.pem
key=genrsa
bash
#루트인증서
openssl genpkey -algorithm RSA -out rootca.key -pkeyopt rsa_keygen_bits:2048
openssl req -new -sha256 -key rootca.key -out rootca.csr -subj "/C=KR/L=Seoul/O=fredric/CN=fredrics.playground"
openssl x509 -req -sha256 -days 3650 -in rootca.csr -signkey rootca.key -out rootca.crt
#서버인증서
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048
openssl req -new -sha256 -key server.key -out server.csr -subj "/C=KR/L=Seoul/O=fredric/CN=*.fredric.playground.cld"
openssl x509 -req -sha256 -days 3650 -in server.csr -CA rootca.crt -CAkey rootca.key -CAcreateserial -out server.crt
#서버인증서 정보 출력
openssl x509 -in server.crt -text -noout
#루트인증서와 서버인증서를 모두 포함하는 pem파일 제작
cat server.crt rootac.crt > server.pem
자체서명 인증서 및 키 생성
bash
openssl req -x509 \
-newkey rsa:2048 \
-keyout example.key \
-out example.crt \
-days 3650 \
-nodes \
-subj "/C=KR/L=Seoul/O=fredric/CN=*.fredric.playground.cld"
기관인증서 및 CSR 생성후 인증서 생성 (step by step)
bash
#개인키 생성
openssl genrsa -aes256 -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
openssl req -new -key private.key -out private.csr
#CA key 생성
openssl genrsa -aes256 -out root.ca.key 2048
#CA 10년 서명요청
openssl req -x509 -new -nodes -key root.ca.key -days 3650 -out root.ca.pem
#기관서명된 10년 인증서 생성
openssl x509 -req -in private.csr -CA root.ca.pem -CAkey root.ca.key -CAcreateserial -out private.crt -days 3650
Configure CA
Step 1 – Creating a private key for Certificate Authority:
txt
mkdir /root/certificates
cd /root/certificates
Step 2 – Creating Private Key and CSR:
txt
openssl genrsa -out ca.key 2048
openssl req -new -key ca.key -subj "/CN=KUBERNETES-CA" -out ca.csr
Step 3 – Self-Sign the CSR:
txt
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt -days 1000
Step 4 – Remove the CSR
txt
rm -f ca.csr
Step 5 – Check Contents of Certificate
bash
openssl x509 -in ca.crt -text -noout
Secret
bash
# 임의의 16바이트 16진수 문자열 생성 (ENCRYPTION_KEY)
openssl rand -hex 16
# 임의의 32바이트 base64 문자열 생성 (AUTH_SECRET)
openssl rand -base64 32
Super old
K8s Secret
1. Openssl을 이용해서 Private Key, Public Key 생성
bash
#- Private Key 생성 명령어
openssl genrsa -out [파일명] [bit길이]
#예시) openssl genrsa -out test.key 2048
#- Public Key 생성 명령어
openssl rsa -in [privateKey 파일명] -pubout -out [파일명]
#예시) openssl rsa -in test.key -pubout -out test_pub.key
2. Private Key를 이용한 CSR(Certificate Signing Request 생성)
bash
#- CSR생성 명령어
openssl req -new -key [privateKey 파일명] -out [파일명]
# 예시) openssl req -new -key test.key -out test.csr
#- 생성 옵션 입력
# // 이 부분은 임시로 작성한 내용입니다.
# // 외부로 서비스 할 때는 공인 사이트에서 인증서를 발급 받아서 사용해야합니다.
# // 직접 작성해서 사용하는 것은 사설 서버에서 사용합니다.
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]: example
Organization Unit Name (eg, section) []: example
Common Name (eg, YOUR name) []: test
Email Address []: [email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: test
3. CRT 인증서 만들기
bash
openssl req -x509 -days [유효기간] -key [privateKey 파일명] -in [csr파일명] -out [파일명] -days [유효기간]
# 예시) openssl req -x509 -days 365 -key test.key -in test.csr -out test.crt -days 365
4. CRT파일을 PEM파일로 변환
bash
openssl x509 -in [crt파일명] -out [파일명] -outform PEM
# 예시) openssl x509 -in test.crt -out test.pem -outform PEM
5. Kubernetes에 secret 생성
bash
# 이미 동일한 이름의 secret이 존재한다면 아래의 명령어로 삭제합니다.
# kubectl delete secret [secret명] -n [namespace명]
kubectl create secret tls [secret명] --key [privateKey 파일명] --cert [crt 파일명] -n [kubernetes namespace명]
예시) kubectl create secret tls test-secret --key test.key --cert test.crt -n dev
K8s 클라이언트 인증서
자동갱신
수동갱신
bash
mkdir ~/crtTestPath-20230825
export CRT_TEST_PATH=$HOME/crtTestPath-20230825
openssl.cnf 구성시 기존 데이터 참조
bash
# 기존 인증서 정보를 확인한 후 제작 필요.
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text
>>>
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 284673793232647265 (0x3f35d4e827eb461)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=kubernetes
Validity
Not Before: Aug 24 10:12:30 2023 GMT
Not After: Aug 23 10:15:09 2024 GMT
Subject: CN=kube-apiserver
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:d9:ca:16:53:50:6e:78:d8:b9:4d:ab:89:36:e3:
f8:8d:5e:0a:42:5e:7a:39:e2:b9:3f:57:cd:0e:d8:
01:27:b2:34:a1:f0:76:e6:4c:6a:4d:d5:03:4a:17:
ce:c9:68:06:a6:6c:af:b9:14:15:ce:e7:d5:89:74:
bb:4e:33:09:33:55:ea:36:5e:33:d3:df:c8:7b:fb:
a7:69:dc:f7:ba:40:30:3e:0f:a8:09:67:86:8b:25:
fc:e9:6d:c5:a5:5b:74:15:56:77:1e:16:11:f0:1d:
c7:48:ce:e0:18:7f:57:63:36:8d:df:70:f5:77:91:
83:f1:e7:26:5c:fa:6a:8d:89:b2:d9:75:fd:93:35:
ef:90:21:e9:b3:02:5f:02:0e:2a:f4:f2:24:7c:99:
c2:2d:e4:da:20:22:8e:6c:c3:8f:16:b8:bb:8e:10:
e8:62:e6:ec:12:5a:1c:a8:1b:04:20:09:fa:eb:0f:
dc:d6:8a:2e:5d:21:07:a3:5e:ee:00:a9:2d:df:30:
a7:cc:88:34:ca:13:5d:52:62:c4:d7:67:55:78:8f:
31:07:38:ce:fb:8d:d4:e8:2f:26:02:c6:3e:ae:7e:
c3:25:34:9b:7a:44:83:01:f1:75:c7:43:7e:ce:12:
bf:8b:17:72:8e:00:a5:1c:d5:39:e3:80:13:ae:a3:
c5:4f
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Authority Key Identifier:
keyid:03:62:D9:03:14:6E:D2:E4:49:3C:EE:AE:82:B0:48:75:A5:A6:91:CA
X509v3 Subject Alternative Name:
DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:platform-k8s-master-2, IP Address:10.96.0.1, IP Address: 192.168.50.11, IP Address:192.168.50.10
Signature Algorithm: sha256WithRSAEncryption
c9:40:18:85:17:c7:64:8a:7a:28:63:0d:fa:9c:76:d9:cf:84:
e7:16:11:45:4f:3a:00:89:4a:c8:b3:19:52:bc:8d:5e:9c:1b:
52:6e:12:72:84:82:34:3a:0b:56:d7:a0:4c:1f:a0:0d:cb:a6:
93:83:08:40:5f:26:d5:eb:a5:dc:91:81:b8:8b:84:65:b8:bd:
9f:2f:c1:c1:a7:3a:67:4e:a0:51:78:f7:43:55:fc:8a:c6:4c:
63:5a:4f:94:1c:85:cd:1c:ff:5e:c0:c3:1d:a0:f3:41:3d:91:
d4:c5:5c:f7:0d:be:63:1f:60:ce:22:78:ba:ab:4d:9e:44:01:
0d:56:8e:2f:fb:2e:64:25:f1:d7:10:cd:2d:1d:51:16:02:c8:
99:f8:ac:f4:3b:22:19:a5:51:a3:07:89:20:f7:70:08:7d:75:
55:a1:cc:21:19:82:a4:16:0f:0a:af:1c:3a:79:90:26:a8:6b:
a6:e3:07:20:a7:87:72:6c:89:7d:0c:f9:69:9b:13:e1:6a:40:
3b:d4:50:96:e7:d0:a1:ec:5d:9a:fe:ed:78:1d:1d:ff:11:9c:
23:6c:aa:9f:56:e6:d5:e5:73:bd:d8:86:09:ba:69:02:12:94:
15:f2:88:24:04:b2:97:19:1c:51:95:41:e8:1e:12:39:d4:d8:
ae:58:46:01
<<<
openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -text
>>>
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=kubernetes
Validity
Not Before: Aug 24 10:12:30 2023 GMT
Not After: Aug 21 10:12:30 2033 GMT
Subject: CN=kubernetes
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:f3:b4:2a:b5:b1:7e:8d:23:ac:0d:14:73:72:68:
7b:d5:52:06:6c:22:53:8c:90:3a:30:92:c4:88:b9:
38:a1:b5:56:ad:82:44:84:67:2f:d7:68:1c:c1:8e:
3e:1f:bd:ac:a4:dc:4b:bf:b2:2c:01:8b:f9:5c:bb:
59:0c:00:9c:2e:f6:f6:6c:d2:f8:fd:3a:7e:29:78:
9b:cb:5c:5f:21:5a:4f:60:ae:bd:dc:29:8e:bf:55:
23:50:ec:f7:c4:2e:d3:23:de:99:8e:fd:56:83:02:
c9:e8:29:f5:ab:78:5b:10:14:c6:1e:63:6a:02:61:
23:1d:72:e0:71:61:41:ad:bd:53:fa:81:96:4e:f8:
6d:94:51:ff:92:81:13:46:a7:73:bc:3f:32:58:75:
dc:01:71:19:53:4d:af:4a:11:24:68:ee:47:37:2d:
95:63:b7:e9:07:85:6c:22:e2:6c:d7:01:47:c6:aa:
41:41:4d:24:ca:0f:cc:5a:3a:4f:2d:43:2c:32:e4:
07:c4:57:29:44:c1:94:c9:6a:8c:69:bc:6f:3f:71:
40:12:74:e5:24:e8:60:60:89:cc:69:5b:4a:08:68:
13:b7:7e:96:22:55:15:f9:70:4d:7b:7b:a6:5c:71:
b2:64:29:68:86:62:d1:d9:90:f3:08:ce:b7:c9:45:
18:c5
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment, Certificate Sign
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Subject Key Identifier:
03:62:D9:03:14:6E:D2:E4:49:3C:EE:AE:82:B0:48:75:A5:A6:91:CA
X509v3 Subject Alternative Name:
DNS:kubernetes
Signature Algorithm: sha256WithRSAEncryption
c9:18:da:8c:b3:b7:41:65:45:65:81:4d:d7:6d:86:16:95:ee:
8b:56:81:90:7d:2b:32:f7:d6:2c:be:d8:1f:0c:eb:d2:94:d4:
a9:0a:0e:87:d1:6f:50:9c:7a:e6:ce:f7:a0:e2:d1:93:85:84:
65:22:78:81:09:f1:29:03:a1:f0:1b:65:49:93:d6:22:06:7e:
92:6d:85:59:6a:3d:47:0e:10:1f:3e:8d:5d:56:e3:da:9e:47:
d4:34:6c:dd:33:e9:eb:09:93:9e:48:05:6f:04:f5:11:5a:5c:
96:cf:ad:4b:cb:17:20:6b:69:64:c6:20:7e:30:bb:98:11:1b:
97:54:b3:33:5d:54:e2:28:62:35:f4:ca:1d:e9:cf:6b:96:21:
a5:09:b9:25:66:74:2e:22:71:30:ee:27:0e:d8:84:0f:0b:f3:
b6:1d:b4:5f:e4:a8:2a:31:41:55:8e:57:56:ed:38:d5:21:ee:
d5:82:a2:31:53:46:db:7f:d2:3e:4d:17:a9:f5:2f:81:32:e8:
7f:fd:bb:42:90:c4:94:b4:a6:a0:97:d5:39:9b:73:6f:29:ca:
60:f1:bf:fa:aa:b8:e9:57:3d:70:1b:f9:70:42:0e:27:f7:d1:
18:cf:52:5c:aa:f0:43:7b:c8:95:43:30:36:67:18:e4:4c:7c:
5f:68:6f:21
<<<
bash
vi $CRT_TEST_PATH/openssl.cnf
---
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = kube-apiserver
[v3_req]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
#> master 1
DNS.5 = platform-k8s-master-1
IP.1 = 10.96.0.1
IP.2 = 192.168.50.10
#> master 2
DNS.5 = platform-k8s-master-2
IP.1 = 10.96.0.1
IP.2 = 192.168.50.11
IP.2 = 192.168.50.10
#> master 3
DNS.5 = platform-k8s-master-3
IP.1 = 10.96.0.1
IP.2 = 192.168.50.12
IP.2 = 192.168.50.10
bash
openssl req -new \
-key /etc/kubernetes/pki/apiserver.key \
-out $CRT_TEST_PATH/apiserver.csr \
-subj "/CN=kube-apiserver" \
-config $CRT_TEST_PATH/openssl.cnf
openssl x509 -req \
-in $CRT_TEST_PATH/apiserver.csr \
-CA /etc/kubernetes/pki/ca.crt \
-CAkey /etc/kubernetes/pki/ca.key \
-CAcreateserial \
-out $CRT_TEST_PATH/apiserver.crt \
-days 3650 \
-extensions v3_req \
-extfile $CRT_TEST_PATH/openssl.cnf
Failed Process Stack
1. RSA key와 CSR
bash
# 1.개인키 생성
sudo openssl genrsa -out ${keyfile} 2048
#sudo openssl genpkey -algorithm RSA -out ${keyfile} -outform PEM -aes256
# 2.서명요청(csr) 생성: ca.cert 파일과 일치하는 정보 입력: 일반 이름(CN), 조직(O) 등
sudo openssl req -new -key ${keyfile} -out ${csrfile}
# 1. 새로운 키로 csr 생성
#sudo openssl req -new -newkey rsa:2048 -keyout ${keyfile} -out ${csrfile} -subj "/CN=192.168.50.10" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=IP:192.168.50.10")) -nodes
#sudo openssl req -new -newkey rsa:2048 -keyout ${keyfile} -out ${csrfile} -subj "/CN=192.168.50.10" -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=IP:192.168.50.10")) -reqexts SAN -nodes
#sudo openssl req -new -newkey rsa:2048 -keyout ${keyfile} -out ${csrfile} -subj "/CN=192.168.50.10" -config <(printf "[req]\ndistinguished_name=req\n[ SAN]\nsubjectAltName=IP:192.168.50.10\n") -reqexts SAN -nodes
2. x509 인증서 생성
bash
# CA 없이 인증서 생성
sudo openssl x509 -req -in ${csrfile} -signkey ${keyfile} -out ${crtfile} -days 3650
# CA인증서로 인증서 생성
# 1.CA 인증서용 시리얼넘버 생성
echo 'B4A3E792F8D1C6A9' > ca.srl
# 2.CA 인증서를 사용하여 인증서 생성
sudo openssl x509 -req -in ${csrfile} -CA ca.crt -CAkey ca.key -out ${crtfile} -days 3650 -sha256
—temp
bash
# 1.서명요청(csr) 생성: ca.cert 파일과 일치하는 정보 입력: 일반 이름(CN), 조직(O) 등
sudo openssl req -new -key ${keyfile} -out ${csrfile}
# 2.CA 인증서용 시리얼넘버 생성
echo 'B4A3E792F8D1C6A9' > ca.srl
# 3.CA 인증서를 사용하여 인증서 생성
sudo openssl x509 -req -in ${csrfile} -CA ca.crt -CAkey ca.key -out ${crtfile} -days 3650 -sha256
!!
bash
# openssl.conf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = kube-apiserver
[v3_req]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
X509v3 extensions:
keyUsage = critical
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
basicConstraints = critical CA:FALSE
X509v3 Authority Key Identifier:
keyid:40:67:1D:8C:A5:70:E4:39:8D:8C:FD:49:B9:DC:9E:AE:7D:E3:5F:38
X509v3 Subject Alternative Name:
DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, DNS:lb-apiserver.kubernetes.local, DNS:localhost, DNS:platform-k8s-master-1, DNS:platform-k8s-master-1.cluster.local, DNS:platform-k8s-master-2, DNS:platform-k8s-master-2.cluster.local, DNS:platform-k8s-master-3, DNS:platform-k8s-master-3.cluster.local, IP Address:10.233.0.1, IP Address:172.16.0.189, IP Address:172.16.0.162, IP Address:127.0.0.1, IP Address:172.16.0.137
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = lb-apiserver.kubernetes.local
DNS.6 = localhost
DNS.7 = platform-k8s-master-1
DNS.8 = platform-k8s-master-1.cluster.local
DNS.9 = platform-k8s-master-2
DNS.10 = platform-k8s-master-2.cluster.local
DNS.11 = platform-k8s-master-3
DNS.12 = platform-k8s-master-3.cluster.local
IP.1 = 10.233.0.1
IP.2 = 172.16.0.189
IP.3 = 172.16.0.162
IP.4 = 127.0.0.1
IP.5 = 172.16.0.137
bash
openssl req -new -key apiserver.key -out apiserver.csr -config openssl.conf
openssl x509 -req -in apiserver.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out aiserver.crt -days 3650 -extensions v3_req -extfile openssl.conf
openssl req -new \
-key apiserver.key \
-out apiserver.csr \
-subj "/CN=kube-apiserver" \
-config <(cat /etc/kubernetes/openssl.conf <(printf "[alt_names]\nDNS=kubernetes\nDNS=kubernetes.default\nDNS=kubernetes.default.svc\nDNS=kubernetes.default.svc.cluster.local\nDNS=platform-k8s-master-3\nIP.1=10.96.0.1\nIP.2=192.168.50.12\nIP.3=192.168.50.10"))
기존 key, ca 인증서로 갱신
bash
#!/bin/bash
cd /etc/kubernetes/pki/
subj="CN = kube-apiserver"
cert_days=3650
ca_cert="ca.crt"
ca_key="ca.key"
key="apiserver.key"
csr="apiserver.csr"
cert="apiserver.crt"
common_csr_conf='distinguished_name = dn\n[dn]\n[v3_ext]\nkeyUsage = critical, digitalSignature, keyEncipherment\n'
cert_type="server"
case "${cert_type}" in
client)
csr_conf=$(printf "%bextendedKeyUsage = clientAuth\n" "${common_csr_conf}")
;;
server)
csr_conf=$(printf "%bextendedKeyUsage = serverAuth\nsubjectAltName = %b\n" "${common_csr_conf}" "${alt_name}")
;;
peer)
csr_conf=$(printf "%bextendedKeyUsage = serverAuth, clientAuth\nsubjectAltName = %b\n" "${common_csr_conf}" "${alt_name}")
;;
*)
log::err "unknow, unsupported certs type: ${YELLOW}${cert_type}${NC}, supported type: client, server, peer"
exit 1
;;
esac
rm ${cert}
# gen csr
openssl req -new -key "${key}" -subj "${subj}" -reqexts v3_ext \
-config <(printf "%b" "${csr_conf}") \
-out "${csr}" >/dev/null 2>&1
# gen cert
openssl x509 -in "${csr}" -req -CA "${ca_cert}" -CAkey "${ca_key}" -CAcreateserial -extensions v3_ext \
-extfile <(printf "%b" "${csr_conf}") \
-days "${cert_days}" -out "${cert}" >/dev/null 2>&1
Leave a Reply