문제

나는가.인터넷 응용 프로그램을 사용하고 싶은 클라이언트로 전화하는 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.

또한보십시오 https://stackoverflow.com/a/8291956/130352

상황에 따라 서버에 인증서를 더 먼저 설치해야합니다. .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.

내가 사용하여 인증서는 웹에서 작업입니다.

제 경우에는 애플리케이션 풀에서 네트워크 서비스에 대한 정체성을 변경하면이 문제가 해결되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top