SSL을 설치해야 하는 인트라넷 서버가 있습니다.
이것이openssl.cnf
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
attributes = req_attributes
req_extensions = req_ext
#prompt = no
[ req_distinguished_name ]
countryName = US
countryName_min = 2
countryName_max = 2
stateOrProvinceName = CHICAGO
localityName = CHICAGO
0.organizationName = MY COMPANY
organizationalUnitName = IOS DEVELOPMENT
commonName = server2.myserver.local
commonName_max = 64
emailAddress = [email protected]
emailAddress_max = 64
[ req_attributes ]
challengePassword = password
challengePassword_min = 4
challengePassword_max = 20
[ req_ext ]
subjectAltName = @alt_names
extendedKeyUsage = serverAuth
[alt_names]
DNS.1 = server2.myserver.local
DNS.2 = myserver.local
이것이 내가 그것을 만드는 데 사용하는 명령입니다.
루트 CA 키 생성
openssl genrsa -des3 -out rootCA.key 4096
2. 루트 CA 인증서를 생성하는 중입니다.
openssl req \
-x509 -new -nodes \
-key rootCA.key -sha256 \
-days 825 \
-out rootCA.crt \
-subj /CN=server2.myserver.local \
-reqexts SAN \
-extensions SAN \
-config <(cat ./openssl.cnf \
<(printf '[SAN]\nsubjectAltName=DNS:server2.myserver.local')) \
-extensions 'req_ext'
인증서 키 생성
openssl genrsa -out mydomain.com.key 4096
인증서 생성
openssl req -new -sha256 -key mydomain.com.key \ -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=server2.myserver.local" \ -reqexts SAN \ -config <(cat ./openssl.cnf \ <(printf "\n[SAN]\nsubjectAltName=DNS:server2.myserver.local,DNS:myserver.local")) \ -out mydomain.com.csr
CA 인증서를 p12로 변환
openssl pkcs12 -export -out ca.p12 -inkey rootCA.key -in rootCA.crt
인증서를 p12로 변환
openssl pkcs12 -export -out certificate.p12 -inkey mydomain.com.key -in mydomain.com.crt
그런 다음 IIS 서버와 장치에 ca.p12
및를 설치합니다 .certificate.p12
방문하려고 하면server2.myserver.local
나는 얻다
어떻게 성자 인증서의 이름으로 그런 일을 할 수 있나요?
답변1
루트 CA 인증서가 완전히 잘못되었다고 말하고 싶습니다. CA 인증서는 최종 호스트 TLS 인증서와 매우 다릅니다. 둘 다에 동일한 구성을 사용할 수 없습니다.
제목에 서버의 도메인을 넣지 마세요. 그건 쓸모가 없습니다. CA라면,
CN=My internal CA
그런 것이 있어야 합니다.확장 을 추가합니다
basicConstraints
. 인증서가 CA라고 명시되어 있어야 합니다.올바른
keyUsage
. 'keyCertSign' 및 (완전성을 위해) 'cRLSign'이 필요합니다.추가하지 마십시오
subjectAltName
. 인증서는 기관/발급자를 위한 것이지 서버용이 아닙니다!추가하지 마십시오
extendedKeyUsage
. 때로는 CA가 발급할 수 있는 인증서를 제한하는 데 사용되지만 이러한 복잡성 없이 시작하는 것이 더 좋습니다.subjectKeyIdentifier
나중에 동일한 주체 DN을 가진 여러 내부 CA가 생길 경우를 대비해 을 추가하는 것이 좋습니다 . (일반적으로 CA DN은 고유해야 하지만 SKI/AKI를 사용하면 이 문제가 좀 더 완화됩니다.)
따라서 다음과 유사한 "CA" 구성 파일이 있어야 합니다(그리고 명령줄을 통해 SAN 및 기타 항목을 추가하는 것을 중지합니다. 이것이 바로 구성의 목적입니다).
[ req ]
default_md = sha256
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_dn ]
countryName = US
stateOrProvinceName = Chicago
organizationName = Company Name
organizationalUnitName = iOS development
commonName = Internal development CA
[ req_ext ]
basicConstraints = critical, CA:TRUE
keyUsage = keyCertSign, cRLSign
subjectKeyIdentifier = hash
반면 최종 엔터티 인증서(TLS 서버)에는 다음 확장이 있어야 합니다.
...
[ req_ext ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer
subjectAltName = DNS:server2.myserver.local
그런 다음 IIS 서버와 장치에 ca.p12 및 Certificate.p12를 설치합니다.
귀하의 장치에 CA의 개인 키를 설치하지 마십시오!서버에도 설치하지 마세요. 설치해야합니다오직CA 인증서 rootCA.crt
(공개 부분) 외에는 아무것도 없습니다.
나의 최종 추천: 원시 openssl
. 대신 사용쉬운-RSA(OpenVPN과 함께 제공되는 것) 또는 사용XCA(그래픽 Linux 앱) 또는 다음 중 하나를 사용하세요.아마도 수십이미 작성되고 테스트된 프로그램.