루트 인증서 사용을 도메인으로 제한 할 수 있습니까


28

고객이 자체 서명 된 인증서를 사용하여 응용 프로그램이 작동합니다. 작동하려면 인증서 서명에 사용한 루트 인증서를 설치해야합니다.

하나의 도메인에 대해서만 유효성을 검사하도록 루트 인증서를 구성 할 수 있습니까?


그것은 단지 나일지도 모르지만, 당신이 실제로 무엇을 요구하는지는 확실하지 않습니다. 어떤 최종 상태를 달성하려고합니까? 루트 인증서를 도메인 컨트롤러 트러스트로 가져 오면 해당 도메인 아래의 시스템 만 그에 대한 유효성을 검사 할 수 있습니다.
Gravy

자체 서명 된 인증서를 공개적으로 신뢰할 수없는 루트 CA를 사용하는 것과 혼동하는 것처럼 들립니다. 자체 서명 된 인증서를 사용하도록 구성된 응용 프로그램은 인증서 유효성 검사 오류를 무시하도록 구성해야하므로 매우 나쁩니다. 공개적으로 신뢰할 수없는 루트 CA를 사용하는 것은 실제로 매우 일반적입니다.
Greg Askew

내부 CA 서버가 있습니까?
Crypt32

1
CA는 이름 제한 이있는 특정 도메인으로 자체를 제한 할 수 있지만 다른 CA에 소급 적용하는 것은 다른 문제입니다.
Matt Nordhoff

3
다른 점이 없다. 타사 CA에도 이름 제약 조건을 적용 할 수 있습니다. 개인 CA를 사용하여 타사 루트 CA 인증서에 서명하고 생성 된 교차 인증서를 게시하면됩니다. 이 경우, 외부 체인은 제한된 교차 인증서를 통해 개인 체인으로 연결됩니다.
Crypt32

답변:


24

경험적으로 볼 때 :

아니요 , 고객의 CA 인증서를 신뢰한다는 것은 해당 CA가 서명 한 모든 인증서의 신뢰입니다.

최종 사용자가 특정 (하위) 도메인에 대해서만 고객이나 다른 CA 인증서를 신뢰할 수 있도록 선택할 수있는 쉬운 옵션이있는 응용 프로그램 / 라이브러리를 모르겠습니다. example.com 및 * .example.org 및 기타 정보는 없습니다.

모질라는 현재 신뢰할 수있는 정부가로 CA의 후원에 대해 비슷한 우려가 열려 관심 지점 및 예를 들어를 크롬 불량이 * .google.com에 인증서와 Diginotar CA의 타협이 공개 된 방법이었다 Google 사이트에 액세스하기위한 내장 추가 검사를 가지고 .

그러나 CA를 신뢰하지 않더라도 해당 CA가 서명 한 특정 서버 인증서를 가져 오거나 신뢰할 수 있으므로 해당 인증서의 호스트 이름에 대한 SSL 경고가 표시되지 않습니다. 따라서 오류나 불만없이 응용 프로그램이 작동해야합니다.

예외 :

X.509v3 PKI 표준의 매우 사용되지 않는 옵션은 이름 제약 조건 확장으로, CA 인증서에 인증서를 발급 할 권한이있는 도메인 이름 패턴의 화이트리스트 및 블랙리스트를 포함 할 수 있습니다.

운이 좋을 수도 있고 고객이 PKI 인프라를 설정하고 해당 CA 인증서에 해당 이름 제약 조건을 포함 시켰을 때 스스로를 제한했습니다. 그런 다음 CA 인증서를 직접 가져 와서 제한된 범위의 도메인 이름 만 유효성 검증 할 수 있음을 알 수 있습니다.


2
@CryptoGuy : 내부 CA는 외부 도메인에 대한 인증서를 발급 할 수도 있습니다. 당신이 당신의 내부 CA를 신뢰하면 자신의 (Active Directory 또는 DNS) 도메인에 대한 인증서 만 아무 제한 등이있다 example.com또는 *.ad.example.com 유효합니다. 내부 CA는 *.example.bank중간자 (man-in-the-middle) 공격 을 허용하고 온라인 뱅킹 자격 증명을 스누핑하기 위한 인증서를 발급 할 수도 있습니다 .
HBruijn

1
"모든 것"은 완벽하게 정확하지 않습니다. 인증서 해지 목록과 같은 것들이 있습니다. 그러나 그것은 결론을 바꾸지 않습니다.
벤 Voigt

1
죄송합니다. 다시 틀립니다. 타사 CA가 발급 한 인증서를 해당 이름의 인증서로 신뢰하도록 제한 할 수 있습니다. 귀하의 내부 CA에 관해서는 신뢰를 의심합니다. 자신의 CA를 신뢰하지 않으면 IT에 문제가있는 것입니다. 개인 CA를 사용함으로써 OP는 타사 CA에 대한 부분 신뢰를 설정할 수 있습니다 (신뢰할 수있는 이름을 제한하여).
Crypt32

3
편집 한 게시물 : 타사 CA에 이름 제한이없는 경우에도 교차 인증을 통해 자체 내부 CA 서버를 사용하여 적용 할 수 있습니다. 이 경우 인증서 체인은 다음과 같습니다. 리프 SSL 인증서-> 상호 인증서-> CA 인증서-> 내부 루트 인증서. 비결은 내부 CA를 사용하여 타사 CA에 서명하는 것입니다. 상호 인증서에는 모든 필수 제약 조건이 있습니다.
Crypt32

1
CryptoGuy는 이것이 가능하지만 구현 세부 사항을 찾는 것은 어렵다고 말합니다. 이것이 어떻게 달성 될 수 있는지를 설명하는 대답은 어떻습니까? 그리고 어떤 플랫폼이 nameConstraints를 지원하는지에 대한 토론 일 것입니다.
jorfus

17

@CryptoGuy는 여기에 꽤 좋은 대답을했지만 확장하고 싶었습니다.

말을 바꾸려면 :

타사 CA가 발급 한 인증서를 해당 이름의 인증서로 신뢰하도록 제한 할 수 있습니다. 타사 CA에 이름 제약 조건 확장이 없더라도 상호 인증을 통해 자체 내부 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 확장을 추가 할 수 있습니다.

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

-x509-to-req인수를 사용하여 요청을 작성 해야 할 수도 있습니다. 요청을 작성하려면 위 중간과 정확히 같은 방식으로 서명하십시오.

이제 루트 CA, 중간 CA 및 도메인 간 CA를 브라우저의 트러스트 데이터베이스에 추가하십시오.


2
MacOS는 nameConstraints를 지원하지 않습니다. 이름이 제한된 내부 CA를 사용하는 사람에게는 FIY 만 적용하십시오. security.stackexchange.com/questions/95600/… archive.is/6Clgb
jorfus

Q :이 솔루션의 상태는 무엇입니까? 요즘 어떤 시스템이 작동합니까 (2018)? // 또 다른 회사 자체 서명 인증서를 설치해야 할 때마다 이것을 원했습니다. 홍콩 우체국이나 시만텍에 대해 생각할 때마다 // 우연히 확장을 구현하지 않는 한, 설명 된 축소를 구현하지 않아도 상관 없다고 생각합니다.
Krazy Glew

@KrazyGlew 나는 이것을 위해 사용하는 배치 파일을 가지고 있으며 여전히 정기적으로 사용합니다. 때때로 중간 인증서가 만료되거나 회전 할 때 재발급해야하므로 조금 더 수동적이지만 문제가되지는 않았습니다. 때로는 다른 중간 기관을 사용하거나 추가 한 도메인 이름으로 인해 브라우저가 신뢰하지 못하는 기관 관리 사이트를 통해 실행되기도합니다.
davenpcj

2
방금 성공적으로 사용했습니다. 감사합니다. 중간 인증서 없이도 잘 작동합니다. 인증서를 사용하면 어떤 이점이 있습니까? 또한 basicConstraints구성 파일 의 행으로 인해 제약 조건 확장이 인증서에 두 번 포함되어 Firefox에서 암호 오류 메시지와 함께 인증서를 거부하게됩니다. 안전하게 제거 할 수 있다고 생각합니다.
wrtlprnft

마지막 단계에서 오류가 발생했습니다 : error with certificate to be certified - should be self signed. 그것은 무엇을 의미하고 어떻게 해결합니까? pastebin.ubuntu.com/p/QHhpQh2N6J
mymedia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.