相关疑难解决方法(0)

如何验证证书是否由特定证书颁发机构创建?

我有一个Windows证书颁发机构,我用它来通过.net/c#发出客户端身份验证证书.通过COM调用证书颁发机构的API,我已经能够成功地以编程方式颁发证书.我在设置客户端时发出新证书.

在运行时,这些客户端将证书附加到我的服务器的请求.如何以编程方式验证X509Certificate2是否由我的证书颁发机构的根证书签名(并拒绝由任何其他来源签名的证书)?

.net c# security certificate

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

ASP.NET:使用文件中的公钥和私钥对URL进行签名

我想更新Google AMP缓存,因此我需要按此处所述签署一个网址.

我的主要问题:我正在努力获取我的证书/密钥,以及如何将它们包含在我的代码中.我找不到任何关于Windows和IIS的覆盖说明.

我一直在阅读这些帖子:

  1. 使用/ update-cache请求更新AMP页面
  2. 如何使用RSA和SHA256与.NET签署文件?

我不想使用第二篇文章中描述的计算机证书存储区.我宁愿在磁盘上使用公钥和私钥.从我的生产服务器IIS,我将我的证书导出到.pfx文件,然后我使用此站点底部的说明从中提取私钥和证书.server.key包含-----BEGIN RSA PRIVATE KEY-----,如果我使用它加载到privateCert下面代码中的变量抛出错误Cannot find the requested object.

我已经从我的SSL提供商得到: www_example_com.crt,www_example_com.p7b,的certificate code(见下文).

我采取的步骤:

  1. test-public-key.cer通过打开www_example.com.crt并使用Copy to file向导将其复制到base64编码的.cer文件来创建.
  2. certificate code收到了来自我的SSL提供商的文件test-private-key.cer.

当我运行以下代码时,我收到错误

你调用的对象是空的.

在线 key.FromXmlString(privateCert.PrivateKey.ToXmlString(True))

Dim publicCert As X509Certificate2 = New X509Certificate2("C:\temp\_certificates\test-public-key.cer")
Dim privateCert As X509Certificate2 = New X509Certificate2("C:\temp\_certificates\test-private-key.cer")

'Round-trip the key to XML and back, there might be a better way but …
Run Code Online (Sandbox Code Playgroud)

asp.net ssl rsa certificate google-amp

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

将SubjectPublicKeyInfo格式的公钥转换为RSAPublicKey格式java

该PublicKey.getEncoded(),返回包含的SubjectPublicKeyInfo(X.509)格式的公钥的字节数组,我如何将其转换为RSA公共密钥编码?

java cryptography rsa pkcs#1

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

使用.NET加密库在c#中使用.pem文件中的私钥解密

我知道这是一个类似的问题这一个,但我低着头Bouncey城堡路线之前,没有人知道它可以从一个.质子交换膜的文件,例如加载RSA密钥:

 -----BEGIN RSA PRIVATE KEY-----
 MIIBOgIBAAJBALKzy66nRuof8Fg0ItatyHS9RiDIKH0m5lorKzKn4y5wR6BXpVUv
 ZwnevrAJWBd6EPr/lcV3hjObxD6+q9vmN8ECAwEAAQJAGNcxWwfZrbXe3QPyS9FA
 aindU7U/G5aKssIJcTMxO0UYpGU+WArJbboKeEIE7bpNfhDOKTL7ZL6kWBR1Svlh
 WQIhAOhtx+xXuSrIot59tmXZaypBDjA4n+Xare0ObFLQxWuvAiEAxNMwm6w33bVr
 FHS9slkOh59Le2mgs0uNT6perHaRP48CIGMyRzrlDY/m5SvTtz6slgIIlceawxNU
 Sxp7J1wI4djdAiA6+BchHNjkCP2a9Fr9OydaRMSFpiDqduFQk/enbiKYSwIhANO3
 SQ51oLFtWN9gX3tfKTXflyO6BV8rgPo980d9CEsb
 -----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

直接使用.NET 3.5加密库而无需参加第三方或自行滚动?

c# rsacryptoserviceprovider .net-3.5

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

从.NET Core中的PEM文件创建X509Certificate2

我想基于PEM文件创建X509Certificate2对象。问题是设置X509Certificate2的PrivateKey属性。我在.NET Core上阅读X509Certificate2.CreateFromCertFile() ,然后使用

var rsa = new RSACryptoServiceProvider();

rsa.ImportCspBlob(pvk);
Run Code Online (Sandbox Code Playgroud)

pvk私钥的字节数组在哪里(从GetBytesFromPEM读取,如此处所示,如何从PEM文件获取私钥?)来设置私钥,但随后我得到了一个

Internal.Cryptography.CryptoThrowHelper + WindowsCryptographicException,带有消息提供程序错误版本。

如何根据PEM文件中的私钥正确设置X509Certificate2的私钥?

如果我看创建X509Certificate2,他们使用

 RSACryptoServiceProvider prov = Crypto.DecodeRsaPrivateKey(keyBuffer);
 certificate.PrivateKey = prov;
Run Code Online (Sandbox Code Playgroud)

这似乎是一种整洁的方法,但这在.Net Core中不起作用...

c# pem x509certificate .net-core private-key

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

使用Bouncy Castle生成keyPair

我有使用BC生成密钥对的Java代码,如下所示:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(1024);
        KeyPair key = keyGen.generateKeyPair();
        PrivateKey priv = key.getPrivate();
        PublicKey pub = key.getPublic();
        String privateKey = new String(Base64.encode(priv.getEncoded(), 0,priv.getEncoded().length, Base64.NO_WRAP));
        String publicKey1 = new String(Base64.encode(pub.getEncoded(), 0,pub.getEncoded().length, Base64.NO_WRAP));
        String publicKey = new String(Base64.encode(publicKey1.getBytes(),0, publicKey1.getBytes().length, Base64.NO_WRAP));
Run Code Online (Sandbox Code Playgroud)

现在我想在C#中使用BC做同样的事情.我已经通过nuget包管理器下载了WP8BouncyCastle库.我写的是:

var kpgen = new RsaKeyPairGenerator();

            kpgen.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));

            var keyPair = kpgen.GenerateKeyPair();
            AsymmetricKeyParameter privateKey = keyPair.Private;
            AsymmetricKeyParameter publicKey = keyPair.Public;


            string prvKey = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(privateKey.ToString()));
            string pubKey = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(publicKey.ToString()));
            string pubKey1 = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(pubKey.ToString()));
Run Code Online (Sandbox Code Playgroud)

但是我需要getEncoded()Java中可用的方法,这在C#中的BC库中是不可用的.此getEncoded()方法用于将给定密钥转换为X.509编码密钥.在Java的情况下,公钥被转换两次(getencoded() …

java bouncycastle c#-4.0 windows-phone-8

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

如何为非阻塞异步套接字创建 SslStream

我有一个多线程异步System.Net.Socket,它侦听端口。如果我收到来自 HTTP 的请求,我不会遇到任何问题,但最近我必须向我的应用程序添加 https 支持。

客户给了我一份.arm认证文件。它包含 base-64 编码的 ASCII 数据。文件名是cert.arm,它存储在我的解决方案文件夹的根目录中。

到目前为止,我使用该证书的操作如下:

using System;
using System.Net;
using System.Threading;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace SocketExample
{
    public class StackOverFlow
    {
        public static ManualResetEvent _manualResetEvent = new ManualResetEvent(false);
        private static X509Certificate2 _cert = X509Certificate2("..\\..\\cert.arm");

        static void Main(string[] args)
        {
            StartListening();
        }

        private static void StartListening()
        {
            IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 9002);

            if (localEndPoint != null)
            {
                Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, …
Run Code Online (Sandbox Code Playgroud)

c# sockets

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

使用 Bouncycastle 存储 PKCS#12 容器 (pfx)

我正在努力使用 Xamarin 和 BouncyCastle 创建 pfx 文件。我有以下设置/规范

  • .NET:PCL .Net 框架 4.5.1
  • Xamarin:4.5.0.476
  • BouncyCastle:BouncyCastle 签名 1.7.0.1(NuGet 包

我想为我的移动客户端生成一个自签名证书,以便根据我的服务器对其进行身份验证。使用 BouncyCastle 进行创作效果非常好。我的问题是,当我想将证书及其私钥存储为 PKCS#12 (pfx) 容器并从该容器恢复它以发送由它签名的 Web 请求时,会抛出异常告诉我Input data cannot be coded as a valide certificate

以下是我创建证书、密钥和存储 pfx 容器的步骤。

创建密钥对:

private AsymmetricCipherKeyPair GenerateKeyPair()
{
    var random = new SecureRandom();
    var keyGenerationParameter = new KeyGenerationParameters(random, 4096);
    var keyPairGenerator = new RsaKeyPairGenerator();
    keyPairGenerator.Init(keyGenerationParameter);
    var keyPair = keyPairGenerator.GenerateKeyPair();

   return keyPair;
}
Run Code Online (Sandbox Code Playgroud)

创建证书,它将调用创建密钥并创建容器:

public void CreateCertificate()
{
    var random = new SecureRandom();
    var keyPair …
Run Code Online (Sandbox Code Playgroud)

c# mono bouncycastle portable-class-library xamarin

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

如何直接在Kestrel中使用PEM证书?

我想在我的ASP.Net Core 2.0(带有Kestrel Web服务器)应用程序中使用HTTPS。

官方文档使用pfx格式,但是我想直接使用PEM格式(由Let's crypto生成),而无需进行任何转换(至少在我的C#代码之外没有任何转换)。有可能吗?

c# ssl-certificate .net-core kestrel-http-server asp.net-core

4
推荐指数
3
解决办法
3050
查看次数

RSA.ImportParameters()中的CryptographicException - 特殊1024键中的错误数据

我们有一个C#/ .Net 4.0应用程序,它从WebService中收到的Base64中的String中导入RSA私钥.

此应用程序适用于1024位的RSA密钥,但不使用特殊类型的rsa私钥(大约1%的密钥).

这是字节长度:

工作密钥:

  • 模数=> 128字节
  • 指数=> 3个字节
  • D => 128字节
  • P => 64字节
  • Q => 64字节
  • DP => 64字节
  • DQ => 64字节
  • IQ => 64字节

不工作的密钥:

  • 模数=> 128字节
  • 指数=> 3个字节
  • D => 127字节
  • P => 64字节
  • Q => 64字节
  • DP => 64字节
  • DQ => 64字节
  • IQ => 64字节

不同之处在于D的长度(128个工作,127个不工作).非工作密钥比工作密钥短1个字节.

参数已设置但在执行RSA.ImportParameters(rsaParams)时会抛出带有"错误数据"消息的CryptographicException.

应该包括什么来解决这个问题?

c# cryptographicexception rsa private-key

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