제이미 구엔은 여기에서 찾을 수 있습니다 인증서 및 CRL을, 인증 기관을 작성하고 실행에 큰 가이드가 있습니다 https://jamielinux.com/docs/openssl-certificate-authority/
이 내가 당신의 질문에 대답하면서 참조 느슨하게 될 것입니다 것입니다. 이 명령들의 출력이 어떻게 될지 궁금한 점이 있다면, 나는 그의 사이트를 참조한다. 이미 관리가 용이 한이 게시물을 유지하기 위해 여기서는 생략되었습니다.
게시 ed CA Certificate
먼저 CA 구성을 준비해야합니다.
# OpenSSL root CA configuration file.
[ ca ]
default_ca = ca_default
[ ca_default ]
dir = /etc/pki/CA
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/db/root-ca.index
serial = $dir/db/root-ca.serial
RANDFILE = $dir/private/.rand
private_key = $dir/private/root-ca.key
certificate = $dir/certs/root-ca.crt
crlnumber = $dir/db/root-ca.crlnumber
crl = $dir/crl/root-ca.crl
crl_extensions = crl_ext
default_crl_days = 180
default_md = sha384
name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_loose
[ policy_strict ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 3072
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha384
x509_extensions = int_ca
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
countryName_default = US
stateOrProvinceName_default = MD
localityName_default =
0.organizationName_default = LAB
organizationalUnitName_default =
emailAddress_default =
[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ server_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ crl_ext ]
authorityKeyIdentifier=keyid:always
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
이이 openssl.cnf
로 작업 디렉토리에 배치해야합니다 : 당신은 자신의 튜토리얼을 통해 이동하지 않으려면, 당신은 단순히 다음과 같은 다소 단축 설정을 사용할 수 있습니다.
dir = /etc/pki/CA
행을 수정할 디렉토리를 지정하고 CDP를 통해 해지 확인을 사용하려면 CDP URL을 실제 도메인을 가리 키도록 변경해야합니다.
다음으로 CA가 예상하는 파일과 디렉토리를 만든 다음 CA 인증서 용 RSA 개인 키를 생성해야합니다. 참고 : CA 개인 키는 암호로 보호됩니다.
mkdir db private certs crl newcerts csr & touch db/root-ca.index
echo 1000 > db/root-ca.serial & echo 1000 > db/root-ca.crlnumber
openssl genrsa -aes256 -out private/root-ca.key 4096
이제 새 개인 키를 사용하여 CA 인증서를 생성해야합니다.개인 키를 만들 때 입력 한 암호를 물어보고 국가, 주 및 일반 이름과 같은 일부 정보를 묻는 메시지가 나타납니다. 일반적인 이름 필드는 여기에서 중요하며이 테스트에서는 단지 Test Root CA
을 넣습니다. 명령이 성공적으로 완료되면
openssl req -config openssl.cnf -key private/root-ca.key \
-new -x509 -days 3650 -sha256 -extensions root_ca \
-out certs/root-ca.crt
, 당신은 다음과 같은 명령으로 볼 수있는, certs/root-ca.crt
에서 새 인증서를 볼 수 :
openssl x509 -in certs/root-ca.crt -noout -text
잎 인증서 만들기
잎을 만들려면 인증서 (엔드 엔티티 인증서라고도 함)를 사용하면 각각에 대해 다른 개인 키를 생성해야합니다. test1
및 test2
이라고 부릅니다.
openssl genrsa -aes256 -out private/test1.key 4096
openssl genrsa -aes256 -out private/test2.key 4096
각각에 대해 CA가 실제 인증서를 생성하는 데 사용할 인증서 서명 요청 (CSR)을 생성합니다. CA 인증서를 만들 때와 비슷한 질문을하게됩니다. 일반적인 이름으로 Test 1
및 Test 2
을 사용할 수 있습니다.
openssl req -config openssl.cnf -key private/test1.key
-new -sha256 -out csr/test1.req
openssl req -config openssl.cnf -key private/test2.key
-new -sha256 -out csr/test2.req
이제 csr
디렉토리에 두 개의 인증서 요청이 있어야합니다. 우리는 이것을 사용하여 인증서를 생성합니다. 이러한 요청에 서명하려면 CA 개인 키 암호를 입력해야합니다.
openssl ca -config -in csr/test1.req -out certs/test1.crt \
-extensions server_cert -days 365 -notext -md sha256
openssl ca -config -in csr/test2.req -out certs/test2.crt \
-extensions server_cert -days 365 -notext -md sha256
이제 certs
디렉토리에 두 개의 새 잎사귀 인증서가 있어야합니다. 아래 명령을 사용하여 볼 수 있습니다. 인증서
을 해지
는
openssl x509 -in certs/test1.crt -noout -text
openssl x509 -in certs/test2.crt -noout -text
이제 재미있는 부분 온다. 인증서 취소 프로세스는 서명과 유사합니다. 우리는 CA 인증서와 개인 키를 사용하여 Test 2
잎을 취소합니다. 다음 명령에는 CA 개인 키 암호가 필요합니다. 당신이 궁금하다면
openssl ca -config opnessl.cnf -revoke certs/test2.crt
,이 점은 일련 번호와 우리가 발급 한 인증서의 타임 스탬프를 기록했습니다까지 db/root-ca.index
파일은 이제 Test 2
옆에 두 번째 취소 타임 스탬프를 표시해야합니다. 일반적인 텍스트 파일입니다. CRL이 간단보기
openssl ca -config openssl.cnf -gencrl -out crl/root-ca.crl
: 이제 다음 우리는 간단하게 할 CRL을 생성하기 위해 CRL
게시
는
(CA 개인 키 암호 필요). 아래 명령을 사용하면 일련 번호 Test 2
에 대한 항목과 해지 된 타임 스탬프가 표시됩니다.인증서 취소 된을 확인하려면
openssl crl -in crl/root-ca.crl -noout -text
는 다음 명령이 사용됩니다 취소의 인증서 상태를 반환해야이 사용 cat certs/root-ca.crt crl/root-ca.crl > crl/crl-chain.pem
openssl verify -crl_check -CAfile crl/crl-chain.pem certs/test2.crt
Test 2
을 위해. Test 1
에 대해 동일한 명령을 실행하면 확인이 반환됩니다.
랩까지
가정하면 모든 것이 제대로 일, 최종 결과는 다음과 같아야합니다
- 한 CA 인증서
- 한 좋은 잎 인증서
- 한
certs/test1.crt
에서 certs/root-ca.crt
에 취소 잎 인증서 in certs/test2.crt
- 하나의 CRL i n
crl/root-ca.crl
참고 1 : 이것은 Linux 시스템에서 OpenSSL을 사용한다고 가정합니다. 창문에 대한 안내가 필요하면 certutil
을 제공 할 수 있습니다.
참고 2 : 본 가이드에는 질문과 직접적인 관련이없는 내용이 많이 생략되었습니다. 이 프로세스에 대한 자세한 내용을 보려면 상단에 게시 된 링크를 다시 참조하십시오.
스택 오버플로는 프로그래밍 및 개발 관련 질문에 대한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제와는 거리가 먼 것처럼 보입니다. 도움말 센터에서 [여기에서 내가 질문 할 수있는 항목은 무엇입니까?] (http://stackoverflow.com/help/on-topic)를 참조하십시오. 아마도 [Super User] (http://superuser.com/) 나 [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/)가 더 나은 곳이 될 것입니다. 또한 [Dev Ops에 대한 질문은 어디에 게시합니까?] (http://meta.stackexchange.com/q/134306) – jww
[인증 기관의 인증서 서명 요청에 서명하는 방법] (http : // stackoverflow .com/a/21340898/608639) 및 [openssl을 사용하여 자체 서명 된 인증서를 만드는 방법?] (http://stackoverflow.com/q/10175812/608639) – jww