회사 내부의 일부 내부 서비스에 대해 자체 서명 된 루트 인증 기관을 만들었습니다. 그런 다음이 CA에 서명 한 해당 서비스에 대한 인증서를 작성했습니다.
이제이 CA에서 발급 된 기존 서버 인증서를 무효화하지 않고 루트 CA에 x509 확장 (CRL 배포 지점)을 추가하려고합니다. 이게 가능해?
내가 이해하는 것처럼 해당 개인 키에 대한 액세스가 필요 하고 인증서 ID에 대한 "전체 권한"에 충분하기 때문에 내 직감은 "예" 입니다. 즉, 인증서가 생성 될 때 공개 키와 함께 일종의 nonce가 인증서에 통합되지 않은 경우입니다.
나는 여전히 SSL 인증서 관리에 익숙하지 않지만 표준 신뢰 체인의 기본 사항을 이해합니다. 다른 PKI 암호화의 기본 사용에 익숙합니다. SSH 키를 관리하고 서명 및 암호화에 GPG를 사용합니다. 나는 컴퓨터 과학을 공부했지만 암호 해독에있어 독학입니다.
나는 원래의 IIRC에 대한 CSR을 만들지 않았다 (나는 그것이 직접적인 결과라고 생각한다 openssl req -new -x509
). 물론 원래 CA의 개인 키를 가지고 있으며이를 사용하여 원래 인증서를 인증서 서명 요청으로 "역방향으로"바꿀 수있었습니다.
openssl x509 -x509toreq -in MyCA.pem -out MyCA.csr -signkey private/MyCA.key
나는 이것이 위에서 언급 한 nonce를 효과적으로 "추출"하고 crlDistributionPoints
필드 를 사용하여 인증서를 다시 만들 수 있기를 원했기 때문에 원래 CA로 서명 된 모든 인증서는 여전히이 새로운 CA에 대해 유효성을 검사하지만 예외는 예외입니다. 클라이언트는 필드에 지정된 HTTP URL에서 (현재 비어있는) CRL 파일을 검색합니다.
그래서 확장 설정 파일을 만들었습니다 ext.conf
:
[ cert_ext ]
subjectKeyIdentifier=hash
crlDistributionPoints=URI:http://security.mycompany.co.za/root.crl
그리고 CSR에서 루트 CA의 새 버전을 생성했습니다.
openssl x509 -extfile ./ext.conf -extensions cert_ext -req -signkey private/MyCA.key -in MyCA.csr -out MyNewCA.pem
이제 인증서를 볼 때 openssl x509 -text -in MyNewCA.pem | less
CRL 확장 부분을 볼 수 있습니다.
X509v3 extensions:
X509v3 Subject Key Identifier:
82:D0:01:03:49:FF:30:16:FA:DC:0A:1E:C1:8C:3D:66:A1:78:FF:F8
X509v3 CRL Distribution Points:
Full Name:
URI:http://security.mycompany.co.za/root.crl`
그러나 아아! 이전에 서명 한 인증서가이 인증서에 대해 더 이상 유효하지 않습니다.
openssl verify -verbose -CAfile MyCA.pem git.pem
git.pem: OK
openssl verify -verbose -CAfile MyNewCA.pem git.pem
git.pem: <redacted DN>
error 20 at 0 depth lookup:unable to get local issuer certificate
주로 인증서의 작동 방식과 이유에 대한 더 많은 통찰력을 찾고 있습니다. 그러나 나는이 문제로 이어지는 문제에 대한 해결책을 환영합니다. 그래서 여기에도 배경 정보가 있습니다.
나는이 혼란에있어 어떻게 내 CA는 Windows에서 인증서 GUI를 설치 → 탐색기 RMB를 통해 설치하거나되면 HTTPS 내부 서비스에 큰 일을 /usr/local/share/ca-certificates
다음 update-ca-certificates
데비안과 우분투. 그러나 최근 예외가 발생했습니다. Windows의 Git, 특히 Windows 보안 채널을 SSL 백엔드로 사용하도록 설치된 경우. 기본적으로 SSL 인증서에 CRL 필드가 있어야한다고 주장합니다.
따라서 계속 실행되는 오류 메시지가 Microsoft와 관련이 있기 때문에 실제로 Windows 보안 채널 문제인 것 같습니다. fatal: unable to access 'https://angery@git.mycompany.co.za/gitblit/r/secret_project.git/': schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate.
OpenSSL을 사용하여 Git을 설치하고 git.http.sslcainfo가 가리키는 파일에 내 CA를 수동으로 연결하면 작동하지만 사용자 가이 프로세스가 더 많은 노력을 기울이는 것보다 SSL 신원 확인에 신경 쓰지 않을까 두려워합니다. "easy"Windows 인증서 설치 프로그램 GUI를 클릭하십시오.
-x509toreq
기존 루트 CA에서 모든 고유 정보를 복구 하기를 원했지만 정보가 없거나 프로세스에 문제가 있습니다.
req -new -x509
그리고 x509 -req -signkey
자체 서명 된 인증서의 일련 번호를 기본값으로 임의의 숫자로 (이것은 무시할 수는 있지만) 사실상 nonce입니다. 자녀 인증서 (또는 그중 하나)에 'keyid'옵션 대신 또는 'issuer + serial'옵션을 사용하는 AuthorityKeyIdentifier가 포함되어있는 경우 ( ca
업스트림 기본 구성 파일과 함께 사용하는 경우) 이전 루트와 동일한 일련의 새 루트를 작성해야합니다. 사용하십시오 -set_serial
. ...