X509Certificate.CreateFromCertFile-지정한 네트워크 암호가 올바르지 않습
-
23-08-2019 - |
문제
나는가.인터넷 응용 프로그램을 사용하고 싶은 클라이언트로 전화하는 SSL 비누 웹 서비스입니다.되었으로 공급한 유효한 클라이언트라고 인증서 foo.pfx
.가입 비밀번호에 대한 인증서다.
난에 위치한 이 인증서는 다음 위치에서: C:\certs\foo.pfx
웹 서비스를 호출,나를 첨부해야한 클라이언트 인증을 지정합니다.여기에는 코드:
public X509Certificate GetCertificateFromDisk(){
try{
string certPath = ConfigurationManager.AppSettings["MyCertPath"].ToString();
//this evaluates to "c:\\certs\\foo.pfx". So far so good.
X509Certificate myCert = X509Certificate.CreateFromCertFile(certPath);
// exception is raised here! "The specified network password is not correct"
return cert;
}
catch (Exception ex){
throw;
}
}
그것은 소리와 같은 예외는 주위에.인터넷 응용 프로그램을 읽는 디스크에 있습니다.방법 CreateFromCertFile
정적 방법을 만들어야의 새 인스턴스 X509Certificate.방법은 없을 재정의 하나만 인수:니다.
때 검사하는 예외,내가 찾는다:
_COMPlusExceptionCode = -532459699
Source=mscorlib
질문:사람이 무엇을 알고 예외의 원인"지정한 네트워크 암호가 올바르지 않습니다"?
해결책
.cer 파일 대신 .pfx에서 인증서를 만들려고했던 것으로 나타났습니다.
교훈을 배웠습니다 ...
- .cer 파일은 이진 형식의 X.509 인증서입니다. 그들은 der encoded.
- .pfx 파일입니다 컨테이너 파일. 또한 인코딩되었습니다. 여기에는 인증서뿐만 아니라 암호화 된 형태의 개인 키도 포함되어 있습니다.
다른 팁
사용자가 필요할 수 있습니다 X509Certificate2()
매개 변수와 함께 X509KeyStorageFlags.MachineKeySet
대신에. 이것은 우리가 가진 비슷한 문제를 해결했습니다. 이것을 제안한 원본 웹 사이트에 대한 크레딧 : http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in-production/
인용 :
원인
문제의 원인은 오류 메시지와 관련이없는 것 같습니다. 어떤 이유로 든 개인 키가 열려있는 파일에 저장되어 있지만 생성자는 개인 키 저장소에 액세스하려고합니다. 기본적으로 사용자 키 스토어가 사용되지만 ASP.NET (및 일반적으로 비 응체 Windows 서비스)는이를 열 수 없습니다. 선택한 계정의 사용자 키 저장소도 존재하지 않을 가능성이 있습니다.
해결책
시도 할 수있는 한 가지는 계정에 로그인하고 개인 상점에서 인증서를 가져 오면서 사용자 키 저장소를 만드는 것입니다.
또 다른 솔루션은 추가 매개 변수를 생성자에게 전달하는 것입니다. 개인 키를 나타내는 플래그는 로컬 컴퓨터에 저장되어 있습니다 - x509keyStorageFlags.MachineKeyset, 다음과 같습니다.
var certificate = new X509Certificate2(fileName, password, X509KeyStorageFlags.MachineKeySet);
비밀번호가없는 PFX의 경우 암호를 다음과 같이 지정할 수 있습니다. string.Empty
.
상황에 따라 서버에 인증서를 더 먼저 설치해야합니다. .cer
파일.
나는 비슷한 프로젝트를 위해 이것을해야했고 여기에 그것이 어떻게 달성되었는지에 대한 나의 메모가있었습니다.
교체 Foo.cer
서버에 설치된 인증서를 내보내는 경우. (인증서를 설치하십시오 pfx
파일을 파일 한 다음 a로 내 보냅니다 cer
파일.)
IIS_WPG 그룹이 CERT 키에 액세스 할 수 있도록 IIS6 명령. 설치해야합니다
winhttpcertcfg
(아래 링크를 따라 자신의 사본을 잡을 수 있습니다).C : Program Files Windows Resource Kits Tools> winhttpcertcfg -i (pfx 파일로가는 경로, 예 : certs foo.pfx) -c local_machine my -a iis_wpg -p (pfx 파일의 비밀번호)
주요 정보를 뱉어 내고 특권을 부여합니다
계정에 대한 개인 키 액세스 부여 :
(SERVERNAME)\IIS_WPG
다운로드 WinHttpCertCfg.msi
여기 그것은 exe를 설치합니다.
Cert 구성 사용 방법에 대한 자세한 정보는 찾을 수 있습니다. 여기.
그런 다음 인증서 푸시를 수행하는 방식으로 돌아갑니다.
//Cert Challenge URL
Uri requestURI = new Uri("https://someurl");
//Create the Request Object
HttpWebRequest pageRequest = (HttpWebRequest)WebRequest.Create(requestURI);
//After installing the cert on the server export a client cert to the working directory as Foo.cer
string certFile = MapPath("Foo.cer");
X509Certificate cert = X509Certificate.CreateFromCertFile(certFile);
//Set the Request Object parameters
pageRequest.ContentType = "application/x-www-form-urlencoded";
pageRequest.Method = "POST";
pageRequest.AllowWriteStreamBuffering = false;
pageRequest.AllowAutoRedirect = false;
pageRequest.ClientCertificates.Add(cert);
이것은 내가 인증서를 통과했지만 당신이 당신의 증명서와 관련이 필요한지 정확히 잘 모르겠으므로 이것은 당신에게 동일하지 않을 수 있습니다.
'지정된 네트워크 비밀번호가 올바르지 않습니다'오류 메시지는 OS 스토어 중 하나에서 가져 오려는 인증서가 해당 상점에 이미 존재하는 경우에 오류 메시지가 반환됩니다.
제 경우에는 개인 애플리케이션 모드에서 실행하려고했는데 동일한 오류가 발생했습니다.
지정된 네트워크 비밀번호가 정확하지 않습니다
privateAuthenticator 생성자 (in Xero.Api.Example.Applications.Private
)는 인증서를 작성하는 동안 정의 된 비밀번호가 없다고 가정하면 인증서를 가져 오려고했습니다.
_certificate = new X509Certificate2();
_certificate.Import(certificatePath);
그런 다음 가져 오기를 변경하여 비밀번호를 사용하는 오버로드 메소드를 사용했습니다.
_certificate.Import(certificatePath, "mypasswordusedtocreatethecertificate", X509KeyStorageFlags.MachineKeySet);
해야 할 수 있습니다 X509KeyStorageFlags.MachineKeySet.
내가 사용하여 인증서는 웹에서 작업입니다.
제 경우에는 애플리케이션 풀에서 네트워크 서비스에 대한 정체성을 변경하면이 문제가 해결되었습니다.