OpenSSL ์์ ๊ฐ๋จํ CA ์ธ์ฆ์์ ์ธ์ฆ์ ๋ฐ๊ธ ๋ฐ CRL ์ ์์ฑํ๋ Perl ๋ช
๋ น์ด๊ฐ CA.pl ์ด๋ค.
OpenSSL ์ ์ด์ฉํด์ ์ธ์ฆ์ ๋ฐ CRL ์์ฑ์ ์ํด์๋ ์ด ํด์ด ๊ฐ์ฅ ์ฝ๊ฒ ํ ์ ์๋ค.
์ด ํ์ผ์ openssl/ssl/misc ํด๋์ ์กด์ฌ ํ๋ค.
๋ฌผ๋ก ์ด ๋ช
๋ น์ด๋ฅผ ์คํ ํ๊ธฐ ์ํด์๋ perl ์ด ์ค์น ๋์ด ์์ด์ผ ํ๋ค.
์ด ๋ฌธ์๋ ๋ช
๋ น์ด ๋ฉ๋ด์ผ ํ์ด์ง๋ฅผ ์ฐธ์กฐ ํด์ ๋ง๋ค์๋ค.
์ด ๋ช
๋ น์ด ํ
์คํธ๋ ๋ฆฌ๋
์ค ํ๊ฒฝ์ด๋ค.
(์๋์ฐ ํ๊ฒฝ์ ํฐ๋ฏธ๋ ์
๋ ฅ์ ๋ฌธ์ ๊ฐ ์์ด์ ๋ฆฌ๋
์ค๋ ๋งฅ์์ ํ๋๊ฑธ ์ถ์ฒ ํจ )
์ด๊ธฐ ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด ๋ฃจํธ CA์ด๋ฉด์ CA์ธ์ฆ์๋ฅผ ๋จผ์ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค.
1. CA ์ธ์ฆ์ ๋ง๋ค๊ธฐ
๋จผ์ CA์ธ์ฆ์๋ฅผ ๋ง๋ค๋ ค๋ฉด CA.pl -newca ๋ช
๋ น์ด๋ฅผ ์คํ ํ๋ค.
์ด๋ ์ด๋ฏธ ๋ช
๋ น์ด๋ฅผ ์คํ ํ๋ฉด demoCA ํด๋๊ฐ ์กด์ฌํ๋๋ฐ ๋ค์ ์คํ ์ ์ด demoCA ํด๋๋ฅผ ์ญ์ ํ๋ฉด ๋๋ค.
์ด ๋ช
๋ น์ด๋ ๋ด๋ถ์ ์ผ๋ก openssl.cnf ์ค์ ํ์ผ์ ์ฐธ์กฐ ํ๋ค.
CA.pl -newca ๋ช
๋ น์ด
jykim@jykim-VirtualBox:~/openssl3/ssl/misc$ ./CA.pl -newca
CA certificate filename (or enter to create)
Making CA certificate ...
====
openssl req -new -keyout ./demoCA/private/cakey.pem -out ./demoCA/careq.pem
jykim@jykim-VirtualBox:~/openssl3/ssl/misc$ ./CA.pl -newca
CA certificate filename (or enter to create)
Making CA certificate ...
====
openssl req -new -keyout ./demoCA/private/cakey.pem -out ./demoCA/careq.pem
1234
์๋ต...
Country Name (2 letter code) [KR]:
State or Province Name (full name) [Korea]:
Locality Name (eg, city) []:
Organization Name (eg, company) [TEST]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:CA
Email Address []:
์๋ต..
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
==> 0
====
====
openssl ca -create_serial -out ./demoCA/cacert.pem -days 1095 -batch -keyfile ./demoCA/private/cakey.pem -selfsign -extensions v3_ca -infiles ./demoCA/careq.pem
Using configuration from /home/jykim/openssl3/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
์คํ ํ๋ฉด์์ ์ฃผ์ ํด์ผํ๋๋ฐ ํํ "Common Name (e.g. server FQDN or YOUR name) []:" ์ด ๋ถ๋ถ์ ๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
์ฆ ์ด๋ฆ ๊ฐ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํจ์ค์๋๋ฅผ 3๋ฒ ์ ๋ ฅ ๋ฐ๋๋ฐ ์ฒ์ ๋๋ฒ์ ๊ฐ์ธํค์ ๋ํ ์ํธ ๋ฐ ์ํธ ํ์ธ์ด๊ตฌ ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์๋ ์ค์ ๋ก ๊ฐ์ธํค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์์์ ์ ๋ ฅํ ๊ฐ์ธํค๋ฅผ ๋ฃ์ด ์ฃผ์ด์ผ ํ๋ค.
2. ์ธ์ฆ์ ๋ฐ๊ธ
demoCAํด๋์ ๋ง๋ค์ด์ง CA์ธ์ฆ์๋ฅผ ์ด์ฉํด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด ๋ณด์
๋จผ์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ๊ธฐ ์ํด์ ์์ฒญ์ ๋ฐ๊ธ์ ํ๊ณ ๊ทธ๋ค์ CA์ธ์ฆ์์ ๊ฐ์ธํค๋ฅผ ์ด์ฉ ์ธ์ฆ์ ๋ฐ๊ธ์ ํด์ผ ํ๋ค.
2-1. ์์ฒญ์ ๋ฐ๊ธ (CSR) ๋ง๋ค๊ธฐ
CA.pl -newreq ๋ช ๋ น์ด
jykim@jykim-VirtualBox:~/openssl3/ssl/misc$ ./CA.pl -newreq
Use of uninitialized value $1 in concatenation (.) or string at ./CA.pl line 145.
====
openssl req -new -keyout newkey.pem -out newreq.pem -days 365
Ignoring -days without -x509; not generating a certificate
์๋ต..
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [KR]:
State or Province Name (full name) [Korea]:
Locality Name (eg, city) []:
Organization Name (eg, company) [TEST]:
Organizational Unit Name (eg, section) []:AAA
Common Name (e.g. server FQDN or YOUR name) []:BBB
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
==> 0
====
Request is in newreq.pem, private key is in newkey.pem
์ด๋ CSR์ ์์ฑ ํ๊ธฐ ์ํด ๊ฐ์ธํค๋ฅผ ๋ง๋ค๊ณ CSR ์ ๋ง๋๋๋ฐ ์ด ๋ ์
๋ ฅํ๋ ํจ์ค์๋๋ CSR์ ๋งค์นญ ๋๋ ๊ฐ์ธํค์ ํจ์ค์๋์ด๋ค.
๊ทธ๋ฆฌ๊ณ CSR ์๋ DN๊ฐ ์์ฑ์ ์ํด์ DN ์ ๋ณด๋ฅผ ์
๋ ฅ ๋ฐ๋๋ค.
์ฐธ๊ณ ๋ก challenge password๋ ์์ฒญ์์ ๋ค์ด๊ฐ๋ ๊ฐ์ธ๋ฐ ๊ทธ๋ฅ ์ํฐ ์น๊ณ ๋์ด๊ฐ์ ์ฌ๊ธฐ์๋ ์์ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
2-2. ์ธ์ฆ์ ๋ฐ๊ธ
์์์ ์์ฑ๋ newreq.pem ์ ์ด์ฉํด ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ์.
CA.pl -sign ๋ช
๋ น์ด
jykim@jykim-VirtualBox:~/openssl3/ssl/misc$ ./CA.pl -sign
====
openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem
Using configuration from /home/jykim/openssl3/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number:
3c:61:45:06:6b:40:c0:d3:0a:b6:39:4a:4b:64:c0:91:3d:36:1c:05
Validity
Not Before: Apr 25 06:34:04 2023 GMT
Not After : Apr 24 06:34:04 2024 GMT
Subject:
countryName = KR
stateOrProvinceName = Korea
organizationName = TEST
organizationalUnitName = AAA
commonName = BBB
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
DC:F4:9B:F4:28:53:80:33:80:B0:F7:B6:41:5E:C4:91:C6:52:45:21
X509v3 Authority Key Identifier:
C0:66:93:EB:1A:8B:0D:90:92:F5:B7:63:3F:5C:1A:72:07:2C:D4:B7
Certificate is to be certified until Apr 24 06:34:04 2024 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
==> 0
====
Signed certificate is in newcert.pem
์
๋ ฅ ํจ์ค์๋๋ cakey.pem ์ฆ CA๊ฐ์ธํค ํจ์ค์๋๋ฅผ ์
๋ ฅํ๋ค.
๋ช
๋ น์ด ์คํ ํด๋์ ๋ณด๋ฉด 3๊ฐ์ง ํ์ผ์ด ์กด์ฌ ํ๋ค.
- newcert.pem : ์์ฑ๋ ์ธ์ฆ์
- newkey.pem : ์์ฑํ ๊ฐ์ธํค
- newreq.pem ์์ฑํ ์์ฒญ์
์ด๋ ๊ฒ ํด๋น ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ์๋ค.
3. ์์ฑ ์ธ์ฆ์์ ๊ฐ์ธํค ํ์ผ pfx ๋ง๋ค๊ธฐ
CA.pl -pkcs12 ๋ช ๋ น์ด
jykim@jykim-VirtualBox:~/openssl3/ssl/misc$ ./CA.pl -pkcs12
====
openssl pkcs12 -in newcert.pem -inkey newkey.pem -certfile ./demoCA/cacert.pem -out newcert.p12 -export -name "My Certificate"
Enter pass phrase for newkey.pem:
Enter Export Password:
Verifying - Enter Export Password:
==> 0
====
PKCS #12 file is in newcert.p12
์ด ๋ช
๋ น์ด๋ ์์ฑํ newkey.pem, newcert.pem ๊ทธ๋ฆฌ๊ณ cacert.pem ์ ์ ๋ณด๋ฅผ ํฌํจํ p12 ํ์ผ์ ๋ง๋ ๋ค.
์ด๋ ์
๋ ฅํ๋ ํจ์ค์๋๋ ์ฒ์์ ๊ฐ์ธํค์ ๋ํ ํจ์ค์๋ ๊ฐ์ ์
๋ ฅํ๊ณ
๊ทธ ๋ค์์๋ pfx ํ์ผ์ ๋ํ ํจ์ค์๋์ ํจ์ค์๋ ๊ฐ์ ์
๋ ฅํด ์ฃผ์ด์ผ ํ๋ค.
4. CRL ํ์ผ ๋ง๋ค๊ธฐ
CA.pl -crl ๋ช ๋ น์ด
jykim@jykim-VirtualBox:~/openssl3/ssl/misc$ ./CA.pl -crl
====
openssl ca -gencrl -out ./demoCA/crl/crl.pem
Using configuration from /home/jykim/openssl3/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
==> 0
====
Generated CRL is in ./demoCA/crl/crl.pem
์
๋ ฅ ํจ์ค์๋๋ cakey.pem ์ฆ CA๊ฐ์ธํค ํจ์ค์๋๋ฅผ ์
๋ ฅํ๋ค.
์ด๋ ๊ฒ ๊ฐ๋จํ CRL ํ์ผ์ ์์ฑ ํ ์ ์๋ค.
ํด๋น ํ์ผ์๋ ํ๊ธฐํ ์ธ์ฆ์ ์ ๋ณด๋ ์๋ค.
5. ์ธ์ฆ์ ํ๊ธฐ ํ๊ธฐ
CA.pl -revoke [reason]
jykim@jykim-VirtualBox:~/openssl3/ssl/misc$ ./CA.pl -revoke newcert.pem
Use of uninitialized value $reason in concatenation (.) or string at ./CA.pl line 230.
====
openssl ca -revoke "newcert.pem"
Using configuration from /home/jykim/openssl3/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Revoking Certificate 3C6145066B40C0D30AB6394A4B64C0913D361C05.
Data Base Updated
==> 0
====
์
๋ ฅ ํจ์ค์๋๋ cakey.pem ์ฆ CA๊ฐ์ธํค ํจ์ค์๋๋ฅผ ์
๋ ฅํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ธ์ฆ์๊ฐ ํ๊ธฐ ๋๋ค.
์ธ์ฆ์ ํ๊ธฐ์ ํ๊ธฐ ์ด์ ๊ฐ์ ๋ถ์ผ์๋ ์๋ค.
์ด์ ๊ฐ์ unspecified, keyCompromise, CACompromise, affiliationChanged, superseded, cessationOfOperation, certificateHold, ๋๋ removeFromCRL ์ด๋ ๊ฒ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ CA.pl -crl ๋ช
๋ น์ด๋ฅผ ์คํ ํ๋ฉด ํด๋น crl ํ์ผ์ ํ๊ธฐ๋ ์ธ์ฆ์ ์ ๋ณด๊ฐ ์ถ๊ฐ ๋๋ค.
์ค์ ๋ก ๊ด๋ จ ์ ๋ณด๋ demoCA์ ๋ณด๋ฉด ๊ด๋ จ ํ์ผ ์ ๋ณด๋ฅผ ์ฐธ๊ณ ํ๊ณ ์๋ค.
- index.txt : ๋ฐ๊ธ๋ ์ธ์ฆ์์ DN ๋ฐ ์๋ฆฌ์ผ ์ ๋ณด ํ์ผ
- crlnumber : ํ๊ธฐ ์ธ์ฆ์ ์๋ฆฌ์ผ ์ ๋ณด
- serial : ๋ฐ๊ธํ ์ธ์ฆ์ ์๋ฆฌ์ผ ๋ฒํธ
์ด๋ ๊ฒ CA.pl ๋ช
๋ น์ด๋ฅผ ์ด์ฉํด ๊ฐ๋จํ CA ์ธ์ฆ์ ๋ฐ ์ธ์ฆ์ ๋ฐ๊ธ์ ํด ๋ณด์๋ค.
์ฌ๊ธฐ์๋ openssl.cnf ๊ฐ์ ๋ํดํธ ๊ฐ์ ์ด์ฉํ๋ค. ( ์ผ๋ถ DN ์ ๋ณด ๋ถ๋ถ์ ์์ ๋จ )
๋ด๋ถ์ ์ผ๋ก openssl.cnf ํ์ผ ์ค์ ์ ์ฐธ๊ณ ํ๋ ๋ด๋ถ ๊ฐ ๋๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ณ๊ฒฝ์ด ํ์์ openssl.cnf ํ์ผ์ ์ ์ ํ ๋ณ๊ฒฝ ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
'Manual > OpenSSL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OpenSSL] Message Digest ( Hash function ) ๋ช ๋ น์ด (0) | 2023.05.08 |
---|---|
[OpenSSL] enc ( ์ํธํ ) ๋ช ๋ น์ด (1) | 2023.05.04 |
[OpenSSL] CMP ๋ช ๋ น์ด ์ฌ์ฉ๋ฒ (0) | 2023.04.07 |
[OpenSSL] RSA์ฉ RootCA ์์ฑ ๋ฐ SSL ์ธ์ฆ์ ๋ง๋ค๊ธฐ (0) | 2023.04.07 |
[OpenSSL] OCSP ์ TSP ๋ช ๋ น์ด (0) | 2023.04.07 |