![루트 인증서 사용을 도메인으로 제한할 수 있습니까?](https://rvso.com/image/652668/%EB%A3%A8%ED%8A%B8%20%EC%9D%B8%EC%A6%9D%EC%84%9C%20%EC%82%AC%EC%9A%A9%EC%9D%84%20%EB%8F%84%EB%A9%94%EC%9D%B8%EC%9C%BC%EB%A1%9C%20%EC%A0%9C%ED%95%9C%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
내 고객은 애플리케이션이 작동하기 위해 자체 서명된 인증서를 사용합니다. 작업하려면 인증서 서명에 사용한 루트 인증서를 설치해야 합니다.
하나의 도메인에 대해서만 유효성을 검사하도록 루트 인증서를 구성할 수 있습니까?
답변1
경험상 다음과 같습니다.
아니요, 고객의 CA 인증서를 신뢰한다는 것은 해당 CA가 서명한 모든 인증서에 대한 신뢰를 의미합니다.
나는 최종 사용자가 특정 (하위) 도메인, 즉 *에 대해서만 고객이나 다른 CA 인증서를 신뢰하도록 선택할 수 있는 쉬운 옵션이 있는 애플리케이션/라이브러리에 대해 알지 못합니다. example.com 및 *.example.org 외에는 아무것도 없습니다.
Mozilla는 현재 신뢰할 수 있는 정부 후원 CA에 대해 비슷한 우려를 갖고 있습니다.주의점을 열어라그리고 예를 들어크롬Google 사이트에 액세스하기 위한 추가 검사 기능이 내장되어 있으며, 이는 악성 *.google.com 인증서와 Diginotar CA의 손상이 공개된 방식입니다.
그러나 CA를 신뢰하지 않더라도 해당 CA가 서명한 특정 서버 인증서를 가져오거나 신뢰할 수 있으므로 해당 인증서의 호스트 이름에 대한 SSL 경고가 표시되지 않습니다. 그러면 애플리케이션이 오류나 불만 없이 작동하게 될 것입니다.
예외:
X.509v3 PKI 표준에서 매우 잘 사용되지 않는 옵션은이름 제약CA 인증서에 인증서 발급 권한이 부여된 도메인 이름 패턴의 화이트리스트 및 블랙리스트를 포함할 수 있는 확장입니다.
운이 좋으면 고객이 PKI 인프라를 설정하고 CA 인증서에 해당 이름 제약 조건을 포함할 때 자제할 수 있습니다. 그런 다음 CA 인증서를 직접 가져와서 제한된 범위의 도메인 이름만 검증할 수 있다는 것을 알 수 있습니다.
답변2
@CryptoGuy는 여기에 꽤 좋은 답변을 제공했지만 더 확장하고 싶었습니다.
다른 말로 하면:
원하는 이름 목록에 발급된 해당 CA의 인증서를 신뢰하도록 타사 CA를 제한할 수 있습니다. 3rd party CA에 Name Constraints 확장 기능이 없더라도 상호 인증을 통해 자체 내부 CA 서버를 이용하여 적용이 가능합니다. 비결은 내부 CA를 사용하여 타사 CA에 서명하는 것입니다.
리프 SSL 인증서 -> 교차 인증서 -> CA 인증서 -> 내부 루트 인증서.
그리고 그 작업을 수행하는 방법은 다음과 같습니다(OpenSSL 명령줄 CA 사용).
간단한 CA 만들기
openssl req -new -x509 -days 3650 -newkey rsa:2048 -sha256 -out root-ca.crt -keyout root-ca.key -subj "/CN=My Root CA"
중간 CA를 생성하거나…
이름 제약 조건을 사용하여 중간 CA 요청을 만듭니다.
openssl req -new -days 3650 -newkey rsa:2048 -out domain-ca.req -sha256 -keyout domain-ca.key -config ossl_domain_com.cfg
파일 에 다음이 포함됩니다 ossl_domain_com.cfg
.
[ req ]
prompt=no
distinguished_name=req_distinguished_name
req_extensions=domain_ca
[ req_distinguished_name ]
CN=somedomain.com trust CA
[ domain_ca ]
basicConstraints=critical,CA:true,pathlen:1
nameConstraints=critical,permitted;DNS:.somedomain.com
그런 다음 해당 CA를 사용하여 중간 도메인 CA에 서명하세요.
openssl x509 -req -in domain-ca.req -CA root-ca.crt -CAkey root-ca.key -sha256 -set_serial 1 -out domain-ca.crt -extensions domain_ca -extfile ossl_domain_com.cfg
...또는 루트 CA로 다시 서명
중간 생성을 건너뛴 경우 루트 CA를 사용하여 서명하세요. 해당 인증서를 사용하여 귀하의 권한 하에 있는 원래 도메인의 CA에 다시 서명하세요. 여기에 CA 확장을 추가할 수 있습니다.
openssl x509 -in third_party_ca.crt -CA domain-ca.crt -CAkey domain-ca.key -set_serial 47 -sha256 -extensions domain_ca -extfile ossl_domain_com.cfg -out domain-cross-ca.crt
openssl x509 -x509toreq
위의 중간 항목과 정확히 동일한 방식으로 서명하는 요청을 생성하는 데 사용해야 할 수도 있습니다 .
이제 루트 CA, 중간 CA 및 도메인 교차 CA를 브라우저의 신뢰 데이터베이스에 추가하십시오.