标签: x509certificate2

我可以在ASP.NET中使用X509Certificate2而不使用证书存储吗?

我试图在Rackspace Cloud中的ASP.NET Web服务中使用X509Certificate.我有一种感觉,云节点上的证书存储可能会导致问题.我也有一个与此相关的问题,除了我在SslStream.AuthenticateAsClient上接收使用iPhone Apple推送通知提供程序(apns-sharp)时的异常C#

在apns-sharp项目中,我使用以下代码:

certificate = new X509Certificate2(p12File)
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个异常并将代码更改为以下解决了X509Certificate2异常.新代码如下:

certificate = new X509Certificate2(p12File, String.Empty, X509KeyStorageFlags.MachineKeySet);
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以在ASP.NET中使用X509Certificate2而不使用证书存储?证书存储是否会导致Rackspace Cloud节点出现问题?

更新#1 Rackspace告诉我不允许访问本地机器证书商店.有没有其他方法可以绕过使用证书存储区?也许使用第三方图书馆?

c# asp.net x509certificate2 apns-sharp

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

离线撤销模式

我的问题与这个问题类似.

我试图只使用本地CRL检查撤销列表.

我使用X509Chain.Build()与以下参数:

    var chainMachine = new X509Chain(true);
            chainMachine.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
            chainMachine.ChainPolicy.UrlRetrievalTimeout = TimeSpan.FromSeconds(30);
            chainMachine.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
            chainMachine.ChainPolicy.VerificationTime = DateTime.Now;
            chainMachine.ChainPolicy.RevocationMode = X509RevocationMode.Offline;
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误:

  1. RevocationStatusUnknown =>撤销功能无法检查证书的吊销.
  2. OfflineRevocation =>撤销功能无法检查证书的吊销,因为吊销服务器处于脱机状态.

奇怪的是,一旦我尝试在线检查撤销列表(因此CRL将被更新),问题就解决了.所以它看起来一旦缓存中有任何东西,问题就不能再复制了.

我认为可能错误消息不正确,实际发生的是当缓存为空时会出现一些异常导致此消息弹出.另一个选择是,可能有一些标志说明缓存是否已经更新,如果它从未更新过,它会尝试从外部服务器获取信息

任何人都可以指出这个问题的原因是什么?

certificate-revocation x509certificate2

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

从PFX文件读取私钥

我知道,有很多关于此的文章,但我仍然找不到解决方案来解决这个问题。我已经在我的机器上使用openssl生成了一个PFX-文件,如下所示:

openssl x509 -req -days 365 -in "myReqest.csr" -signkey "myPrivateKey.pem" -out "myCertificate.crt"
openssl pkcs12 -export -out "myCertificate.pfx" -inkey "myPrivateKey.pem" -in "myCertificate.crt" -certfile "myCertificate.crt"
Run Code Online (Sandbox Code Playgroud)

在我的C#应用​​中,我这样访问私钥:

var cert = new X509Certificate2("myCertificate.pfx", "myPassword");
cert.HasPrivateKey; // This is always true!
cert.PrivateKey; // Works on my machine (only)
Run Code Online (Sandbox Code Playgroud)

这在我的机器上工作得很好,但是当我在另一台机器上运行相同的代码时,它抛出:“找不到密钥集”,即使HasPrivateKey返回了true!私钥不应该包含在* .pfx文件中吗?你能告诉我吗:

  1. 创建我时,openssl是否将证书/私钥以某种方式自动安装在我的计算机上?

  2. 如何从* .PFX文件(或从* .PEM文件)读取私钥?

StackTrace的异常:

at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContaier)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContaier, …
Run Code Online (Sandbox Code Playgroud)

c# pfx x509certificate2 private-key

7
推荐指数
2
解决办法
3万
查看次数

创建X509Certificate2时是否阻止文件创建?

我们在ASP.NET应用程序中创建一个X509Certificate2对象,以定期传出连接.每次创建其中一个证书时,都会在以下位置创建一个新文件:

C:\ ProgramData \微软\加密\ RSA\MachineKeys的

该文件夹现在有400万个永远不会被清理的文件.我试过删除Persist标志

新的X509Certificate2(certBytes,p12Pwd,X509KeyStorageFlags.MachineKeySet);

//没有X509KeyStorageFlags.PersistKeySet

但这没有帮助 - 仍然在每次通话时获得2Kb文件.

当我看到这个答案时,我对此抱有希望,但这是一个2008 R2服务器,而临时文件不是0字节,所以它似乎是一个不同的情况.

如何在不填满磁盘的情况下使用X509Certificate2?

c# ssl certificate x509certificate2 x509certificate

7
推荐指数
3
解决办法
3347
查看次数

无法使用X509Certificate2找到指定的对象

我正在尝试加载包含要访问的密钥的文件Google Calendar API.遵循本教程. 为此,我创建了这段代码:

var certificate = new X509Certificate2("client_secret.json", "notasecret", X509KeyStorageFlags.Exportable);
Run Code Online (Sandbox Code Playgroud)

client_secret.json在我的解决方案中上传了文件,这是文件的路径:"...\Visual Studio 2015\Projects\Calendar\Calendar\bin\Debug\client_secret.json"

但似乎代码无法找到该文件并返回此错误:

无法使用X509Certificate2找到指定的对象

我还在文件Always copy上设置了Copy in the output directory要读取的属性.

c# x509certificate2

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

Certutil要求连接智能卡

我正在尝试运行certutil -repairstore并不断收到有关智能卡的提示。这是AWS上的VM,并且不能选择智能卡。感谢您对如何绕过智能卡并完成维修的任何想法

ssl certificate ssl-certificate x509certificate2 windows-server-2012-r2

7
推荐指数
2
解决办法
2859
查看次数

.NET Core X509Certificate2的用法(在Windows / IIS,Docker,Linux下)

我确实在尝试长时间使用.NET Core API中的证书。

基本上,我需要在IIS和docker上运行的.NET Core Web API中使用它们。

我需要使用的证书用于:

Microsoft.AspNetCore.DataProtection

public void ConfigureServices(IServiceCollection services)
{
  services.AddDataProtection()
    .PersistKeysToFileSystem(new DirectoryInfo(dataProtectionKeystorePath))
    .ProtectKeysWithCertificate
    (
      new X509Certificate2(dataProtectionCertificatePath, dataProtectionCertificateSecret)
    );
}
Run Code Online (Sandbox Code Playgroud)

Kestrel选项以设置SSL证书

public static IWebHost BuildWebHost(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
    .UseKestrel
    (
      options =>
        {
          options.Listen(address, port, listenOptions =>
            {
              listenOptions.UseHttps(new X509Certificate2(sslCertificatePath, sslCertifciateSecret));
            }
          );
        }
      )
      // other setup
     ;
Run Code Online (Sandbox Code Playgroud)

IdentityServer4.SigningCredentials

注意:此代码可从VS2017开始在开发机上运行,​​但会在Windows 2008 R2 IIS测试服务器上引发这些异常。

services.AddIdentityServer()
  .AddSigningCredential
  (
    new X509Certificate2(tokenCertificatePath, tokenCertificatePassphrase)
  )
  // other setup
  ;
Run Code Online (Sandbox Code Playgroud)

这三个都意味着放置一个证书文件,使用构造函数加载它,传递密码,然后开始。

sarkasm>快乐,这很容易。<萨卡姆

因此,我创建了一个包含证书的certs子目录。添加了机密设置。验证所有值均已按预期加载/创建。验证文件位于预期位置并因此存在。简而言之:

string dataProtectionKeystorePath = System.Path.Combine(Environment.ContentRootPath, "keystore");
string dataProtectionCertificatePath = …
Run Code Online (Sandbox Code Playgroud)

c# x509certificate2 identityserver4 asp.net-core-2.1 .net-core-2.1

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

如何获得证书的密钥大小

我有一个X.509证书,需要获得其密钥的大小(以位为单位) - 例如,1024 2048等.我已经查看了X509Certificate2以及bouncycastle X509Certificate类,但看不到如何获得密钥大小.

c# x509certificate2

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

如何使用 X509Certificate 和 AES-256 算法加密/解密文本

我有一个 X509 证书,我想用它来加密/解密密码。但是,我只能使用 AES-256 算法。

我在互联网上找到的所有内容都建议使用 RSACryptoServiceProvider,但这并不执行 AES-256 加密。

我对加密了解不多,所以一些基本的代码示例会有很大帮助。

c# encryption x509certificate2

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

无法在客户端 new X509Certificate2() 上解码证书

我正在使用这个小类,它返回一个字节数组中的 pfx 文件。

服务器端:

byte[] serverCertificatebyte;
var date = new DateTime(DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day);
serverCertificatebyte = Certificate.CreateSelfSignCertificatePfx("CN=RustBuster" + RandomString(5),
    date,
    date.AddDays(7));
Run Code Online (Sandbox Code Playgroud)

然后我将其发送给客户端(长度:1654):

tcpClient.GetStream().Write(serverCertificatebyte , 0, serverCertificatebyte .Length);
Run Code Online (Sandbox Code Playgroud)

一旦客户端读取它,我想将它转换为证书类:(这里长度也是1654)

我尝试做一个新的 X509Certificate2(data); 我在下面得到了错误。这适用于服务器端。怎么了?

我还尝试了 new X509Certificate2(data, string.Empty); 并得到同样的错误

错误 System.Security.Cryptography.CryptographicException:无法解码证书。---> System.Security.Cryptography.CryptographicException:输入数据无法编码为有效证书。---> System.ArgumentOutOfRangeException:不能为负数。

参数名称:长度

在 System.String.Substring (Int32 startIndex, Int32 length) [0x00000] in :0

在 Mono.Security.X509.X509Certificate.PEM (System.String 类型,System.Byte[] 数据)[0x00000] 中:0

在 Mono.Security.X509.X509Certificate..ctor (System.Byte[] data) [0x00000] 中:0

c# ssl x509certificate2

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