FindPrivateKey 샘플
인증서 저장소에서 특정 X.509 인증서와 연결된 프라이빗 키 파일의 위치 및 이름을 찾기가 어려울 수 있습니다. FindPrivateKey.exe 도구는 이 과정에 도움이 됩니다.
Important
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입니다. 자세한 내용은 Application Pool Identities를 참조하세요.
읽기 권한
프로세스에 읽기 권한이 없는 인증서에 액세스하면 다음 예와 비슷한 예외 메시지가 표시됩니다.
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
규칙—명령줄 항목
“[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"