2012-06-27 4 views
0

IX509PrivateKey를 사용하여 X.509 인증 요청 ("NT AUTHORITY \ NETWORK SERVICE") 용 키를 만들고 Create 메서드를 생성하고 있습니다 액세스가 거부되었습니다 (저는 C#에서 파생 인터페이스를 P/Invoke하는 중이므로 HRESULT가 .NET 예외로 변환됩니다). 또한 프로세스 모니터는 액세스가 거부 된 키 파일에 대한 액세스 시도를 표시합니다 (키 파일이 작성 중입니다). 나는 (false로 MachineContext를 설정하여) 대신에 설정된 사용자 키를 생성하는 경우, 내가 대신 "액세스가 거부되었습니다"의 "파일을 찾을 수 없음"을 참조하십시오IX509PrivateKey :: Create는 "네트워크 서비스"라고 불릴 때 액세스를 거부합니다.

 IX509PrivateKey privateKey = new CX509PrivateKey() as IX509PrivateKey; 
     privateKey.Length = request.KeyLength; 
     privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_EXPORT_FLAG; 
     privateKey.KeySpec = X509KeySpec.XCN_AT_SIGNATURE; 
     privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_ALL_USAGES; 
     privateKey.MachineContext = true; 
     privateKey.Create(); 
     return privateKey; 

:

여기에 실제 코드입니다. 그러나 ProcMon은 아무것도 보여주지 않습니다. 모든 키 파일에 액세스하려고 시도하지 않습니다.

프로세스 모니터에서 "네트워크 서비스"가 키 파일에 액세스하지 못했기 때문에 IX509PrivateKey :: SecurityDescriptor 속성을 사용하여 설정했습니다. "Network Service"는 키 파일에 실제로 액세스했지만 Create에서 거부 된 액세스를 여전히 받았으며 ProcMon은 여전히 ​​파일에 대한 액세스가 거부 된 것으로 나타났습니다.

많은 아이디어가 있습니다.

+0

Procmon에서 보이지 않는 경로는 무엇입니까? IIRC, NETWORK_SERVICE는 키가 저장되어있는'C : \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys \ '에 많은 강점이 없습니다. – ixe013

+0

위의 경로에있는 MachineKeys 디렉토리의 키 파일입니다. 그러나 보안 설명자가 제공되면 네트워크 서비스는 해당 파일에 대한 모든 권한을 가지며 여전히 액세스가 거부됩니다. – JohnC

답변

1

이 문제점의 원인이 확인되었습니다.

웹 서비스 내에서 IX509PrivateKey :: Create 호출이 발생했습니다. 그 결과, IUSR의 가장 밑에서 발생했습니다. 잘못된 사용자를 허용하는 ACL을 편집했습니다. 그것은 모호한 사용자 계정에 대해서만 직설적 인 액세스가 거부 된 것으로 밝혀졌습니다. 이 상태는 ProcMon에서 볼 수 있습니다. ProcMon의 "세부 정보"열은 가장 된 사용자 계정으로 통화가 있었음을 명확하게 나타냅니다 ("고급 출력"을 활성화해야 할 수도 있음).

호출이 이루어진 사용자 계정을보다 세밀하게 제어하고 CA에 액세스하기 위해 요청을 프로세스 외부로 이동했습니다. 등록 API 호출은 현재 자체 Windows 서비스에서 이루어지며 WCF (net.tcp)를 통해 IIS에서 실행되는 웹 서비스에 노출됩니다. 그것은 다른 사람들에게 나의 추천 일 것입니다. IMO에서는 IIS 내에서 호출을 제어 할 수없는 요소로 인해 다른 "움직이는 부분"이 발생할 위험이 있습니다.