标签: x509certificate2

C# 将证书字符串转换为X509证书

我收到一个字符串,并希望使用 C# 将其转换为证书。我尝试了以下代码并收到“ The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.”错误:

 byte[] bytes = Convert.FromBase64String(((string[])request.Headers.GetValues("MY-Cert"))[0]);
                var cert = new X509Certificate2(bytes);
Run Code Online (Sandbox Code Playgroud)

使用 C# 读取此类字符串的最佳方法是什么?

类似的问题在这里被问到,但是使用 C++

我收到以下格式的字符串:

-----BEGIN CERTIFICATE-----
MIIExDCCA6ygAwIBAgIJAK0JmDc/YXWsMA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
VQQGEwJJTjELMAkGA1UECBMCQVAxDDAKBgNVBAcTA0hZRDEZMBcGA1UEChMQUm9j
a3dlbGwgY29sbGluczEcMBoGA1UECxMTSW5kaWEgRGVzaWduIENlbnRlcjEOMAwG
A1UEAxMFSU1BQ1MxKTAnBgkqhkiG9w0BCQEWGmJyYWphbkBSb2Nrd2VsbGNvbGxp
bnMuY29tMB4XDTExMDYxNjE0MTQyM1oXDTEyMDYxNTE0MTQyM1owgZwxCzAJBgNV
BAYTAklOMQswCQYDVQQIEwJBUDEMMAoGA1UEBxMDSFlEMRkwFwYDVQQKExBSb2Nr
d2VsbCBjb2xsaW5zMRwwGgYDVQQLExNJbmRpYSBEZXNpZ24gQ2VudGVyMQ4wDAYD
VQQDEwVJTUFDUzEpMCcGCSqGSIb3DQEJARYaYnJhamFuQFJvY2t3ZWxsY29sbGlu
cy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfjHgUAsbXQFkF
hqv8OTHSzuj+8SKGh49wth3UcH9Nk/YOug7ZvI+tnOcrCZdeG2Ot8Y19Wusf59Y7
q61jSbDWt+7u7P0ylWWcQfCE9IHSiJIaKAklMu2qGB8bFSPqDyVJuWSwcSXEb9C2
xJsabfgJr6mpfWjCOKd58wFprf0RF58pWHyBqBOiZ2U20PKhq8gPJo/pEpcnXTY0
x8bw8LZ3SrrIQZ5WntFKdB7McFKG9yFfEhUamTKOffQ2Y+SDEGVDj3eshF6+Fxgj
8plyg3tZPRLSHh5DR42HTc/35LA52BvjRMWYzrs4nf67gf652pgHh0tFMNMTMgZD
rpTkyts9AgMBAAGjggEFMIIBATAdBgNVHQ4EFgQUG0cLBjouoJPM8dQzKUQCZYNY
y8AwgdEGA1UdIwSByTCBxoAUG0cLBjouoJPM8dQzKUQCZYNYy8ChgaKkgZ8wgZwx
CzAJBgNVBAYTAklOMQswCQYDVQQIEwJBUDEMMAoGA1UEBxMDSFlEMRkwFwYDVQQK
ExBSb2Nrd2VsbCBjb2xsaW5zMRwwGgYDVQQLExNJbmRpYSBEZXNpZ24gQ2VudGVy
MQ4wDAYDVQQDEwVJTUFDUzEpMCcGCSqGSIb3DQEJARYaYnJhamFuQFJvY2t3ZWxs
Y29sbGlucy5jb22CCQCtCZg3P2F1rDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
BQUAA4IBAQCyYZxEzn7203no9TdhtKDWOFRwzYvY2kZppQ/EpzF+pzh8LdBOebr+
DLRXNh2NIFaEVV0brpQTI4eh6b5j7QyF2UmA6+44zmku9LzS9DQVKGLhIleB436K
ARoWRqxlEK7TF3TauQfaalGH88ZWoDjqqEP/5oWeQ6pr/RChkCHkBSgq6FfGGSLd
ktgFcF0S9U7Ybii/MD+tWMImK8EE3GGgs876yqX/DDhyfW8DfnNZyl35VF/80j/s
0Lj3F7Po1zsaRbQlhOK5rzRVQA2qnsa4IcQBuYqBWiB6XojPgu9PpRSL7ure7sj6
gRQT0OIU5vXzsmhjqKoZ+dBlh1FpSOX2
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

.net c# x509certificate2 x509certificate c#-4.0

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

X509Certificate2 - 系统找不到指定的路径

我希望通过服务帐户获取Google Analytics的数据.当我第一次启动应用程序时,一切正常,我可以访问数据.但是,当我第二次启动应用程序时,出现以下错误:"系统找不到指定的路径".你有个主意吗?我以为它可以锁定.

这是我的源代码:

   public static String GetAccessToken(string clientIdEMail, string keyFilePath, String scope)
    {
        // certificate
        var certificate = new X509Certificate2(keyFilePath, "notasecret", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

        // header
        var header = new { typ = "JWT", alg = "RS256" };

        // claimset
        var times = GetExpiryAndIssueDate();
        var claimset = new
        {
            iss = clientIdEMail,
            scope = scope,
            aud = "https://accounts.google.com/o/oauth2/token",
            iat = times[0],
            exp = times[1],
        };

        JavaScriptSerializer ser = new JavaScriptSerializer();

        // encoded header
        var headerSerialized = ser.Serialize(header);
        var headerBytes = …
Run Code Online (Sandbox Code Playgroud)

asp.net google-api x509certificate2 oauth-2.0

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

X.509证书:在主题备用名称中添加localhost是一个好主意(或不好)?

我们决定是否应将"localhost"(以及类似"127.0.0.1"之类的地址)添加为证书中的主题备用名称之一.一个好处可能是促进本地测试.但是会有任何缺点吗?

openssl ssl-certificate x509certificate2

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

PowerShell使用密码PFX文件获取证书指纹

我正在尝试使用以下代码获取受密码保护的pfx文件的指纹:

function Get-CertificateThumbprint {
    # 
    # This will return a certificate thumbprint, null if the file isn't found or throw an exception.
    #

    param (
        [parameter(Mandatory = $true)][string] $CertificatePath,
        [parameter(Mandatory = $false)][string] $CertificatePassword
    )

    try {
        if (!(Test-Path $CertificatePath)) {
            return $null;
        }

        if ($CertificatePassword) {
            $sSecStrPassword = ConvertTo-SecureString -String $CertificatePassword -Force –AsPlainText
        }

        $certificateObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
        $certificateObject.Import($CertificatePath, $sSecStrPassword);

        return $certificateObject.Thumbprint
    } catch [Exception] {
        # 
        # Catch accounts already added.
        throw $_;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我收到此错误:

Cannot find an …
Run Code Online (Sandbox Code Playgroud)

passwords powershell x509certificate2

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

X509Certificate2.Verify()始终返回false

面对一个非常奇怪的问题X509Certificate2.Verify()为有效证书返回false.也许有些人之前已经遇到过这种奇怪的情况,并且可以对它有所启发.

我正在使用openssl生成客户端证书以进行测试.我创建了一个根CA并根据该根CA生成客户端证书,并将根CA添加到其链中.

我将根CA和客户端证书加载到本地证书存储区,看起来没问题,但是当我从我的NUnit代码加载它来测试X509Certificate2.Verify()时总是返回false.

在此输入图像描述

以下是从商店加载Cert的代码:

        X509Store store = new X509Store(StoreName.My);
        string thumbprint = "60 d1 38 95 ee 3a 73 1e 7e 0d 70 68 0f 2d d0 69 1e 9a eb 72";
        store.Open(OpenFlags.ReadOnly);
        var mCert = store.Certificates.Find(
                                X509FindType.FindByThumbprint,
                                thumbprint,
                                true
                              ).OfType<System.Security.Cryptography.X509Certificates.X509Certificate>().FirstOrDefault();
        if(mCert != null)
        {
            var testClientCert = new X509Certificate2(mCert);
        }
Run Code Online (Sandbox Code Playgroud)

这是我刚刚生成的客户端证书:(可以从我的本地计算机正确访问CRL URL)

-----BEGIN CERTIFICATE-----
MIIC7jCCAlegAwIBAgIBATANBgkqhkiG9w0BAQUFADBtMR0wGwYDVQQKExRWaXRh
bEhlYWx0aCBTb2Z0d2FyZTElMCMGA1UECxMcVml0YWxIZWFsdGggU29mdHdhcmUg
Um9vdCBDQTElMCMGA1UEAxMcVml0YWxIZWFsdGggU29mdHdhcmUgUm9vdCBDQTAe
Fw0xNTAyMjcwODQ2MzNaFw0xNjAyMjcwODQ2MzNaMEUxHTAbBgNVBAoTFFZpdGFs
SGVhbHRoIFNvZnR3YXJlMREwDwYDVQQLEwhQbGF0Zm9ybTERMA8GA1UEAxMIVGVz
dFVzZXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOkfyjX0PSnRYrBbCC8u
rw7IiFdAUj6frPKEmt0TLAR/4g+NazKdGjRRqxE9mNwX/2zGhIcucfGDVwPtOtiV
opicQEzGiSQkvAc+473MN5D6j3XtBYblALMeMyEYoh3LnHO4K+6kV6XE4BXV/2lV
mAVgXGkZzaayd40DLvg48vPlAgMBAAGjgcUwgcIwCQYDVR0TBAIwADARBglghkgB
hvhCAQEEBAMCB4AwCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMCMDEG
CWCGSAGG+EIBDQQkFiJPcGVuU1NMIENlcnRpZmljYXRlIGZvciBTU0wgQ2xpZW50
ME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9wbGF0Zm9ybWRhc2hib2FyZC5ubC52
aXRhbGhlYWx0aC5sb2NhbC9wb3J0YWwvY3JsLmNybDANBgkqhkiG9w0BAQUFAAOB
gQBXYSmZaVu6vnyl94SO4qpNOutsUm4p7fQHehljhZ+aRrXE10rivWCt4g0k961E
PDsp4J0DR6uth6et42pBp8v2gFIGSQY/F7NhmOAsOJvM7z0oIBxMLcclIDTygbRp
KjZZpNjvf+YJasbidosiL4VSeRiCZ+HPzvKDb3wNeafoZA==
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)

这是我从浏览器访问时下载的CRL文件:

-----BEGIN X509 CRL-----
MIIBMjCBnDANBgkqhkiG9w0BAQUFADBtMR0wGwYDVQQKExRWaXRhbEhlYWx0aCBT
b2Z0d2FyZTElMCMGA1UECxMcVml0YWxIZWFsdGggU29mdHdhcmUgUm9vdCBDQTEl
MCMGA1UEAxMcVml0YWxIZWFsdGggU29mdHdhcmUgUm9vdCBDQRcNMTQwODA3MTQz …
Run Code Online (Sandbox Code Playgroud)

c# client-certificates x509certificate2

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

读远程机器证书

我们可以使用X509商店加载商店并在本地机器中查找证书,但如何为远程服务器上的证书执行相同操作?

我知道我们可以配置网络帐户以获得远程计算机上的证书的权限,但如何使用此网络帐户来读取证书详细信息?

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection results = store.Certificates.Find(X509FindType.FindBySubjectName, "CertName", false);
Run Code Online (Sandbox Code Playgroud)

c# certificate x509certificate2

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

如何使证书中的私钥不可导出C#

所以下面你会发现我的代码创建了一个带有私钥的自签名证书.它存储在用户存储中.现在,当我使用mmc工具时,我可以从证书中导出私钥吗?我认为这是您在创建证书时必须明确添加的标志?

所以我想知道的是,如何更改此代码,以便私钥不再可以通过mmc导出.

码:

public static X509Certificate2 GenerateSelfSignedCertificateNoCA(string subjectName, string issuerName)
{
        const int keyStrength = 2048;

        // Generating Random Numbers
        CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
        SecureRandom random = new SecureRandom(randomGenerator);

        // The Certificate Generator
        X509V3CertificateGenerator certificateGenerator = new X509V3CertificateGenerator();

        // Serial Number
        BigInteger serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random);
        certificateGenerator.SetSerialNumber(serialNumber);

        // Signature Algorithm
        const string signatureAlgorithm = "SHA256WithRSA";
        certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);

        // Issuer and Subject Name
        X509Name subjectDN = new X509Name(subjectName);
        X509Name issuerDN = new X509Name(issuerName);
        certificateGenerator.SetIssuerDN(issuerDN);
        certificateGenerator.SetSubjectDN(subjectDN);

        // Valid For
        DateTime notBefore …
Run Code Online (Sandbox Code Playgroud)

c# x509certificate2 x509certificate

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

从字符串创建X509Certificate2时"无法找到请求的对象"异常

我想X509Certificate2从字符串创建.让我举个例子:

string keyBase64String = Convert.ToBase64String(file.PKCS7);
var cert = new X509Certificate2(Convert.FromBase64String(keyBase64String));
Run Code Online (Sandbox Code Playgroud)

keyBase64String有这样的内容:"MIIF0QYJKoZI ........hvcNAQcCoIIFwjCCBb4CA0="

并且file.PKCS7我从数据库下载的字节数组.

创建时我遇到以下异常X509Certificate2:

找不到请求的对象

并且堆栈跟踪:

"无法在系统中的System.Security.Cryptography.X509Certificates.X509Utils._QueryCertBlobType(Byte [] rawData)处的System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32hr)中找不到请求的对象"X509Certificate2异常"无法找到请求的对象"}. WebApp.SoupController.d__7.MoveNext()上的System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte [] rawData)中的Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte [] rawData,Object password,X509KeyStorageFlags keyStorageFlags)在D:\ Projects\WebApp\Controllers\SoupController.cs中:第118行

请告诉我我做错了什么.任何帮助将不胜感激!

c# encryption x509certificate2 public-key-encryption

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

所有不同X509KeyStorageFlags的基本原理是什么?

今天,一位同事遇到了另外一个与这些相关的错误!我发现这些标志在过去我自己真的很令人沮丧,因为如果你在实例化X509Certificate2对象或导出它们或将它们保存在X509Store中时会略微出错,你可能会遇到各种各样奇怪的错误,例如:

  • 意外地无法告诉NETSH.exe或ASP.net使用某个SSL证书[通过其指纹],即使您的机器商店中有该证书
  • 您可以意外地导出证书数据,但使用.Export()导出它而不使用私钥
  • 意外地,您的单元测试开始在较新的Windows版本上失败,显然是因为您没有使用正确的标志

是的,它们是有记录的,而且所有文档(以及一些文档似乎都有意义),但为什么它必须这么复杂?

.net windows certificate-store x509certificate2

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

“从传输流接收到意外的 EOF 或 0 字节”Azure WebService

我遇到以下问题:我构建了一个应作为 Azure Web 服务运行的 Web 服务,它调用外部 API 检索一些数据。对于连接,外部公司向我提供了一个证书,我已成功将其存储在 Azure Keyvault 中。经过一番尝试和错误后,我在本地测试了下面的代码块,成功验证了证书是否已从保管库中成功检索。这导致我想要检索的数据得到成功响应。到目前为止一切顺利 - 直到我将其发布到 Azure。一切似乎工作正常,但是我收到以下错误消息:

从传输流接收到意外的 EOF 或 0 字节

我已经用完谷歌的前5页了。我不断寻找有关 TLS 的答案,但在测试选项时我明确将其设置为正确的版本(即使在这个代码片段中,我实际上也只使用 TLS 1.2 就很好)。

这是什么原因造成的?我是否缺少一些神秘的 Azure 配置设置?正如我所说,该代码在我的计算机上 100% 运行。问题似乎不是钥匙或金库。最大的区别是,我在本地以租户管理员身份运行代码,但是我为应用程序服务提供了托管身份,并具有对 keyvault 的正确权限。

我还将提供堆栈跟踪。var 结果 = 等待 client.GetAsync(url);

错误抛出于

var result = await client.GetAsync(url);
Run Code Online (Sandbox Code Playgroud)

我希望我已经提供了足够的信息。先感谢您

代码片段:

 public async Task<string>GetData(string url) {
  try {
    var client = await GetHttpClient();
    var result = await client.GetAsync(url);
    if (result.IsSuccessStatusCode) {
      var content = await result.Content.ReadAsStringAsync();
      return content;
    } else {
      Exception ex = new Exception("Failed …
Run Code Online (Sandbox Code Playgroud)

c# client-certificates azure x509certificate2 tls1.2

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