ASP.NET - Kata sandi jaringan yang ditentukan salah

Saya memiliki Klien WCF di mesin dev saya yang memerlukan sertifikat dan berfungsi dengan baik.
Setelah penerapan ke server produksi saya mendapatkan Kesalahan berikut:

[CryptographicException: The specified network password is not correct.]

DEV - Win7 32BIT IIS 7.5
PRODUKSI - Win SERVER 64BIT 2008 IIS 7.5

Padahal tidak ada kata sandi antar jaringan dan tidak ada kata sandi sertifikat. (Saya tahu karena dev bekerja tanpa kata sandi). Satu-satunya kata sandi yang saya miliki adalah kata sandi WCF yang sama dengan DEV.

CrmServiceClient crm = new CrmServiceClient("CrmServiceEndpoint");
crm.ClientCredentials.UserName.UserName = CrmConfigRepository.CrmUserName;//fine
crm.ClientCredentials.UserName.Password = CrmConfigRepository.CrmPassword;//fine
crm.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(Path);
///THIS WONT WORK AS WELL
crm.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(Path, "", X509KeyStorageFlags.Exportable); 

ini adalah tumpukan penuh

[CryptographicException: The specified network password is not correct. ]
   System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +41
   System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx) +0
   System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags) +372
   System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName) +101
   Externals.CrmConnection.Get() in C:\Users\avi\Documents\Visual Studio 2010\Projects\ExpressBroker\Externals\CrmConnection.cs:31
   ExpressBroker.Models.ActionsMetadata.Handlers.LeadAccountHandler.Handle(BrokerAction brokerAction, ActionStep step, Dictionary`2 httpPostDataCollection) in C:\Users\avi\Documents\Visual Studio 2010\Projects\ExpressBroker\ExpressBroker\Models\ActionsMetadata\Handlers\LeadAccountHandler.cs:45
   ExpressBroker.Models.ActionsMetadata.Handlers.BaseStepHandler.SecuredHandle(BrokerAction brokerAction, ActionStep step, Dictionary`2 httpPostDataCollection) in C:\Users\avi\Documents\Visual Studio 2010\Projects\ExpressBroker\ExpressBroker\Models\ActionsMetadata\Handlers\BaseStepHandler.cs:49
   ExpressBroker.Models.ActionsMetadata.Handlers.HandlerInvoker.Invoke(BrokerAction brokerAction, ActionStep actionStep, Dictionary`2 stepValues) in C:\Users\avi\Documents\Visual Studio 2010\Projects\ExpressBroker\ExpressBroker\Models\ActionsMetadata\Handlers\StepServerInoker.cs:29
   ExpressBroker.Controllers.LeadAccountController.Register(String step) in C:\Users\avi\Documents\Visual Studio 2010\Projects\ExpressBroker\ExpressBroker\Controllers\LeadAccountController.cs:28
   lambda_method(Closure , ControllerBase , Object[] ) +127
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +784922
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +371

Terima kasih


person SexyMF    schedule 27.11.2011    source sumber
comment
Apa jalur yang dilalui di konstruktor X509Certificates? Saya pikir itu adalah kata sandi jaringan yang mengakses file sertifikat.   -  person Simon    schedule 27.11.2011
comment
Kemungkinan duplikat? stackoverflow.com/q/899991/130352   -  person Chris J    schedule 29.01.2015


Jawaban (3)


Coba ini:

new X509Certificate2(Path, "", X509KeyStorageFlags.MachineKeySet); 

Tampaknya konstruktor X509Certificate2 mencoba mengakses penyimpanan kunci pribadi pengguna lokal (bahkan ketika memuat PFX dan kunci pribadi ada di PFX). Dengan asp.net, profil pengguna biasanya tidak dimuat, sehingga penyimpanan kunci pengguna tidak ada. Menentukan MachineKeySet memberitahu konstruktor untuk melihat penyimpanan kunci Komputer Lokal yang selalu ada.

person fatnjazzy    schedule 28.11.2011
comment
Jika Anda menyetel parameter X509KeyStorageFlags, ini akan membuat file kunci di folder C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys setiap kali Anda membuat instance objek X509Certificate2, jika Anda sering melakukan ini, disk dapat terisi penuh, jadi gunakanlah ini dengan hati-hati. - person NahuelGQ; 31.03.2016
comment
Solusi terbaik bagi saya adalah membuat asp memuat profil pengguna. Periksa stackoverflow.com/a/10048789/356604 - person NahuelGQ; 31.03.2016
comment
Ini bekerja dengan sempurna. Jika Anda memiliki kata sandi dan ingin menerapkannya, Anda harus menjalankannya dengan cara ini X509Certificate2 sertifikat = new X509Certificate2(Path, yourpassword, X509KeyStorageFlags.MachineKeySet); - person Victor.Uduak; 17.05.2018
comment
Hanya ingin menyebutkan X509Certificate2 baru (Path, kata sandi Anda, X509KeyStorageFlags.MachineKeySet); - person Mohammad Hassani; 02.02.2020

Saya juga memiliki masalah dengan file pfx, masalahnya adalah, file tersebut diekspor menggunakan enkripsi AES256-SHA256, yang memberikan pengecualian yang sama seperti pada pertanyaan. Menurut ini, AES256-SHA256 hanya didukung di Windows 10 1703 , Windows Server 2016 dan yang lebih baru. Mengubah ke TripleDES-SHA1 'menyelesaikan' masalah ini.

person ferikeem    schedule 17.03.2021
comment
Lihat juga: tautan - person ferikeem; 17.03.2021
comment
Jika ada orang lain yang mengalami masalah ini saat mencoba memuat sertifikat terenkripsi AES256 di portal Azure atau memuat berdasarkan kode dari array file/byte... Saya mendapat kesalahan yang sama (menyesatkan), yang hanya saya selesaikan dengan mengekspor ulang sertifikat dalam 3DES-SHA1. Yang aneh, karena secara lokal berfungsi, tetapi berhenti berfungsi setelah dipublikasikan di webapp... PS: Sebelumnya, saya juga mencoba memperpendek kata sandi, tetapi tidak menyelesaikan apa pun. - person Luke; 03.05.2021

Saya mengalami masalah ini dengan file sertifikat PFX yang memiliki kata sandi 40 karakter, Windows mengizinkan saya mengekspor dan mengimpornya, tetapi tidak dapat digunakan dalam kode C#, jadi saya mengubah kata sandi 30 karakter dan itu bekerja.

person Peroxy    schedule 07.07.2020