인증서 저장소에서 특정 X.509 인증서와 연결된 프라이빗 키 파일의 위치와 이름을 찾기 어려울 수 있습니다. FindPrivateKey.exe 도구는 이 프로세스를 용이하게 합니다.
중요합니다
FindPrivateKey 샘플을 사용하기 전에 빌드해야 합니다.
X.509 인증서는 관리자 또는 컴퓨터의 모든 사용자가 설치합니다. 그러나 인증서는 다른 계정으로 실행되는 서비스에서 액세스할 수 있습니다. 예를 들어 네트워크 서비스 계정입니다.
인증서가 원래 설치되지 않았기 때문에 이 계정에 프라이빗 키 파일에 대한 액세스 권한이 없을 수 있습니다. FindPrivateKey 도구는 지정된 X.509 인증서의 프라이빗 키 파일의 위치를 제공합니다. 특정 X.509 인증서의 프라이빗 키 파일 위치를 알고 나면 권한을 추가하거나 이 파일에 대한 권한을 제거할 수 있습니다.
보안을 위해 인증서를 사용하는 샘플은 Setup.bat 파일의 FindPrivateKey 도구를 사용합니다. 프라이빗 키 파일이 발견되면 Cacls.exe 같은 다른 도구를 사용하여 파일에 대한 적절한 액세스 권한을 설정할 수 있습니다.
자체 호스팅 실행 파일과 같은 사용자 계정으로 WCF(Windows Communication Foundation) 서비스를 실행하는 경우 사용자 계정에 파일에 대한 읽기 전용 액세스 권한이 있는지 확인합니다. IIS(인터넷 정보 서비스)에서 WCF 서비스를 실행하는 경우 서비스가 실행되는 기본 계정은 IIS 7 및 이전 버전의 NETWORK SERVICE 또는 IIS 7.5 이상 버전의 애플리케이션 풀 ID입니다. 자세한 내용은 애플리케이션 풀 ID를 참조하세요.
읽기 권한
프로세스에 읽기 권한이 없는 인증서에 액세스할 때 다음 예제와 유사한 예외 메시지가 표시됩니다.
System.ArgumentException was unhandled
Message="The certificate 'CN=localhost' must have a private key that is capable of key exchange. The process must have access rights for the private key."
Source="System.ServiceModel"
이 경우 FindPrivateKey 도구를 사용하여 프라이빗 키 파일을 찾은 다음 서비스가 실행 중인 프로세스에 대한 액세스 권한을 설정합니다. 예를 들어 다음 예제와 같이 Cacls.exe 도구를 사용하여 이 작업을 수행할 수 있습니다.
cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /E /G "NETWORK SERVICE":R
관례 — 항목Command-Line
"[option]"은 선택적 매개 변수 집합을 나타냅니다.
"{option}"은 필수 매개 변수 집합을 나타냅니다.
"option1 | option2"는 옵션 집합 간의 선택을 나타냅니다.
"<value>"는 입력할 매개 변수 값을 나타냅니다.
사용법
FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]
위치:
매개 변수 | 설명 |
---|---|
<subjectName> |
인증서의 주체 이름 |
<thumbprint> |
인증서의 지문(Certmgr.exe 도구를 사용하여 찾을 수 있습니다.) |
-f |
출력 파일 이름만 |
-d |
출력 디렉터리만 |
-a |
출력 절대 파일 이름 |
명령 프롬프트에 매개 변수가 지정되지 않은 경우 이 정보가 포함된 도움말 텍스트가 표시됩니다.
예시
이 예제에서는 현재 사용자의 개인 저장소에서 주체 이름이 "CN=localhost"인 인증서의 파일 이름을 찾습니다.
FindPrivateKey My CurrentUser -n "CN=localhost"
다음은 현재 사용자의 개인 저장소에서 주체 이름이 "CN=localhost"인 인증서의 파일 이름을 찾아 전체 디렉터리 경로를 출력하는 예제입니다.
FindPrivateKey My CurrentUser -n "CN=localhost" -a
이 예제에서는 로컬 컴퓨터의 개인 저장소에서 지문이 "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"인 인증서의 파일 이름을 찾습니다.
FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"