相关疑难解决方法(0)

当我设置IIS池的LoadUserProfile时会发生什么?

我遇到了以下问题.

我运行以下代码

var binaryData = File.ReadAllBytes(pathToPfxFile);
var cert = new X509Certificate2(binaryData, password);
Run Code Online (Sandbox Code Playgroud)

在两个过程中.其中一个进程运行,LOCAL_SYSTEM并且此代码成功.另一个在IIS中在属于"Users"本地组的本地用户帐户下运行,在那里我得到以下异常:

System.Security.Cryptography.CryptographicException
Object was not found.
at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
at System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags)
at System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData, String password)
//my code here
Run Code Online (Sandbox Code Playgroud)

所以我用Google搜索了一下,找到了一个类似问题的答案.我尝试启用LoadUserProfile应用程序池,现在可以正常运行.

问题是我没有得到我设置时会发生LoadUserProfile什么以及可能产生的后果.我的意思是,如果它是一个"好"的东西那么为什么它不是默认"开启",为什么它毕竟在那里?

当我LoadUserProfile在IIS池中设置时会发生什么,它会产生什么负面影响?

.net c# iis-7 application-pool x509certificate

96
推荐指数
1
解决办法
5万
查看次数

HTTP 错误 500.30(Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException:系统找不到指定的文件。)

我正在尝试将 asp.net 核心 Web API 部署到 IIS。这个应用程序在 Visual Studio 上运行得非常好,当我使用 dotnet 命令运行 dll 时也是如此。此应用程序具有用于签署 JWT 令牌的证书。将应用程序部署到 IIS 后,我收到“HTTP 错误 500.30 - ANCM 进程内启动失败”,我检查了 Windows 日志,错误消息是

主机意外终止。Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: 系统找不到指定的文件。在 Internal.Cryptography.Pal.CertificatePal.FilterPFXStore(Byte[] rawData, SafePasswordHandle password, PfxCertStoreFlags pfxCertStoreFlags)......

我检查了文件路径和文件名一切都正确,但由于某些原因 IIS 无法加载找到证书文件。另外,我检查了许可,它看起来也不错。不知道为什么我收到此错误消息

此外,我使用 IIS 指向的 dotnet run 命令运行了相同的应用程序 dll 文件,但我没有收到任何错误。我只有在部署到 IIS 后才会收到此错误。

在 startup.cs 文件和配置方法上,我在这一行遇到错误。

var cert = new X509Certificate2("test_cert.pfx", pwdFrmVault);
Run Code Online (Sandbox Code Playgroud)

iis asp.net-core

3
推荐指数
1
解决办法
314
查看次数

X509Certificate2错误-系统找不到指定的文件

关联的代码在独立的控制台应用程序中运行良好,而在尝试使其正常运行的同时,却在NSB体系结构中出错。我试过在worker中进行相同的测试,也尝试在测试控制台应用程序中进行独立测试。无论哪种情况,它都会出错-X509Certificate2证书=新的X509Certificate2(filePath,“ *** key *** UeUHFxS”); 异常消息-System.Security.Cryptography.CryptographicException:'系统找不到指定的文件。该代码包括一个,如图所示,还包括一个与Activate设备相关的帮助文件。但是,从pfx文件路径和密钥初始化X509Certificate2的部分例外。

class Program
{
    static void Main(string[] args)
    {
        try
        {
            string filePath = Path.GetDirectoryName(System.AppDomain.CurrentDomain.BaseDirectory);
            filePath = Directory.GetParent(Directory.GetParent(filePath).FullName).FullName;
            filePath = Path.Combine(filePath, @"Cert\TestCompany-qa.partner.client.siriusxm.com.pfx");

            X509Certificate2 certificate = new X509Certificate2(filePath, "****key****");
            SoapMessageHelper soapHelper = new SoapMessageHelper(certificate, @"https://api-ext-test.siriusxm.com/SAT/UpdateDeviceSatRefresh/v_1");
            var test = soapHelper.ActivateDevice(new ActivateDeviceRequest()
            {
                SourceName = "12493",
                ESN = "W26890HW",
                TimeStamp = DateTime.UtcNow,
                TrasanctionId = System.Guid.NewGuid().ToString()
            });

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(test);

            foreach (XmlNode node in doc.DocumentElement.ChildNodes)
            {
                foreach (XmlNode locNode in node)
                {
                    if (locNode.Name == "ns0:responseRefreshDevice") …
Run Code Online (Sandbox Code Playgroud)

c# asp.net nservicebus x509certificate2 x509

1
推荐指数
2
解决办法
3918
查看次数

从 Azure Keyvault 获取 X509 证书以在 REST 调用中使用

我正在尝试从 Azure Keyvault 获取证书,然后使用它来调用需要证书进行身份验证的 REST API。

我尝试在本地执行此操作 - 我将.pfx文件放在磁盘上,将其加载到字节数组中,然后从中创建我的证书:

X509Certificate2 x509 = new X509Certificate2(File.ReadAllBytes(path), password);
Run Code Online (Sandbox Code Playgroud)

然后在 RestSharp 中使用该证书来执行我的 REST 调用:

IRestClient client = new RestClient(url);
client.ClientCertificates = new X509CertificateCollection { x509 };

var request = new RestRequest(lastUrlPart, Method.GET);
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Accept", "application/json");
request.AddHeader("Content-Type", "application/json");

IRestResponse response = client.Execute(request);

if (response.IsSuccessful)
{
    // read out the response and process it
}
Run Code Online (Sandbox Code Playgroud)

奇迹般有效。

现在我正在尝试做同样的事情,但从 Azure Keyvault 获取证书。我在 Azure AD 中创建了一个应用注册,创建了我的密钥保管库,并授予了我的应用注册的服务标识访问密钥保管库的权限。我已将我的证书上传到密钥库中。到现在为止还挺好。

我找到了从 Keyvault 获取证书的代码:

var azureServiceTokenProvider = new AzureServiceTokenProvider();

var kv …
Run Code Online (Sandbox Code Playgroud)

rest x509certificate azure-keyvault

1
推荐指数
1
解决办法
2397
查看次数