2010-05-06 2 views
3

일부 시스템에서는 특정 사용자 계정으로 로컬 시스템 계정을 사용하여 실행되는 Windows 서비스가 있습니다.Windows 서비스 용 X509 인증서를 저장할 위치는 어디입니까?

서비스는 X509 인증서를 사용하여 통신 보안을 유지하면서 WCF를 사용합니다.

제 질문은 인증서 (및 개인 키)를 저장하는 가장 좋은 장소는 어디입니까?

인증서 저장소를 사용하는 것이 가장 좋은 방법 인 경우 관리자와 서비스 만 개인 키에 액세스 할 수 있도록 보장해야합니까?

간단한 옵션은 단순히 디스크에 PFX 파일을 저장하고 ACL 만 사용하여 관리자와 서비스 만 액세스 할 수 있도록 할 수 있습니다. 인증서 저장소를 사용하는 것보다이 방법의 장단점은 무엇입니까?

편집 내가 아닌 내보낼로 저장된 개인 키와 인증서 저장소에 인증서를 개최 할 것을 권장 나는 모두의 .NET 프레임 워크 3.5

답변

2

처음으로 C#을 사용하고, 명확히하기 위해. 이제 몇 가지 주장.

컴퓨터에 개인 비밀이나 다른 개인 정보를 저장하는 여러 가지 방법이 있습니다. 가장 오래된 방법은 LsaStorePrivateDataLsaRetrievePrivateData API입니다 (http://msdn.microsoft.com/en-us/library/ms721818%28VS.85%29.aspx 참조). 비밀 수에 제한이 있지만 모든 비밀은 지역, 전역 및 기계로 나눌 수 있습니다.

다음은 DPAPI (http://msdn.microsoft.com/en-us/library/ms995355.aspx 참조) : CryptProtectDataCryptUnprotectData입니다.

귀하의 방식이 귀하의 작업에 가장 적합한 지 다른 방법을 비교하기를 원하므로이 두 가지 방법에 대한 참조를 추가합니다.

내가 물어야 할 가장 중요한 질문은 : 내 개인 키를 보호하는 가장 좋은 방법은 무엇입니까? 나는 당신이 방법을 선택해야한다고 생각합니다. 어느 복사 키를 보호하십시오. 따라서 인증서 저장소를 사용하는 것이 좋습니다. 인증서 저장소에서 으로 내보낼 수있는 개인 키를 저장할 수 없습니다. 이것은 내 생각에 가장 큰 장점이다. 다른 방식으로 해당 개인 키를 사용하여 인증서를 배포 할 수 있습니다. 기기에 저장된 개인 키는 으로 내보낼 수 없음으로 표시되어 있는지 확인하십시오.

디스크의 PFX 파일을 사용하면 이점이 없습니다. 또한 PFX가 암호화되지 않았거나 문제가 발생합니다 여기서 비밀번호는 PFX 파일에 저장해야합니다. 따라서 DPAPI (CryptProtectDataCryptUnprotectData) 또는 LSA API (LsaStorePrivateDataLsaRetrievePrivateData)를 사용해야하며 암호를 내보낼 수 있습니다.

+2

'내보낼 수 없음'플래그는 실제로 보안을 추가하지 않습니다. 감옥 같은 도구 (www.isecpartners.com)를 사용하여 키를 내보내는 일은 간단합니다. – Cocowalla

+0

@Cocowalla 재미있는 정보를 제공해 주셔서 감사합니다! 나에게 새로운 기능이며이 도구에 대한 추가 정보를 검색 할 예정이지만이 도구가 스마트 카드 또는 다른 하드웨어 솔루션에서 개인 키를 내보낼 수 있다고 생각하지 않습니다. 원인에 대한 스마트 카드가 서버용 솔루션에 적합하지 않지만 다른 하드웨어 기반 인증서 저장소가 문제를 해결할 수 있습니다. 또한 Windows의 다음 보안 수정 이후에는 본때를 보여 주면서 더 이상 작동하지 않을 수 있습니다. 신뢰를 말하기 위해 나는 적어도 아키텍처 측면에서 인증서 저장소로서 더 나은 솔루션을 모른다. – Oleg

+0

본때를 보여 주는 스마트 카드에서 내보낼 수 없습니다. 인증서 저장소가 가장 좋은 솔루션 인 경우 어떤 저장소를 사용해야합니까? 로컬 머신 스토어? 이 보안은 (즉, 개인 키에 액세스 할 수있는 사람과 관련하여) 어떻게 보호됩니까? – Cocowalla