GVKun编程网logo

如何从Java的X509Certificate中提取CN?(java提取方法)

8

在本文中,我们将给您介绍关于如何从Java的X509Certificate中提取CN?的详细内容,并且为您解答java提取方法的相关问题,此外,我们还将为您提供关于.NetCore3.1如何在X509

在本文中,我们将给您介绍关于如何从Java的X509Certificate中提取CN?的详细内容,并且为您解答java提取方法的相关问题,此外,我们还将为您提供关于.Net Core 3.1 如何在 X509Certificate2 对象中导入 .cert 和 .key 文件?、.net – System.Security.Cryptography.X509Certificates.X509Certificate2在目标框架版本中不可用、asp.net – X509Certificate2 – 系统找不到指定的路径、ASP.NET使用X509Certificate2出现一系列问题的解决方法的知识。

本文目录一览:

如何从Java的X509Certificate中提取CN?(java提取方法)

如何从Java的X509Certificate中提取CN?(java提取方法)

java

我正在使用SslServerSocket和客户端证书,并希望从客户端的SubjectDN中提取CN X509Certificate

目前,我打电话,cert.getSubjectX500Principal().getName()但这当然给了我客户端的总格式化DN。由于某种原因,我只是对CN=theclientDN 感兴趣。有没有一种方法可以提取DN的这一部分而无需自己解析String?

.Net Core 3.1 如何在 X509Certificate2 对象中导入 .cert 和 .key 文件?

.Net Core 3.1 如何在 X509Certificate2 对象中导入 .cert 和 .key 文件?

如何解决.Net Core 3.1 如何在 X509Certificate2 对象中导入 .cert 和 .key 文件??

这是我第一次处理带有证书的代码。

我的问题是,我需要使用拆分为 .cert 和 .key 文件的证书对电子邮件进行签名。这些文件需要从文件系统中读取,不能存储在某种证书存储中。

用于测试目的的自签名私钥如下所示:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,B5F1CE2CAB1B3CE20326EF3CD60D230

tmPJKtI8S4dGl2B29HhyHlF6Dp6/mDldldX/n2+gYvfSaa4TEPVFQMJfLsRxp1ey
...

导入 .cert 部分相当简单直接:

X509Certificate2 certificate = new X509Certificate2(_emailConfig.PathToCertificate);

但我不知道如何添加实际签名所需的私钥。

这也需要在 Linux 上运行。

任何帮助将不胜感激。

更新 0:

我得到了一个名为 privateKey 的字符串,它只包含私钥,没有任何 PEM 语法。

然后我做了以下事情:

var privateKeyBytes = Convert.FromBase64String(privateKey);
using var rsa = RSA.Create();
rsa.ImportRSAPrivateKey(privateKeyBytes,out _);

然后我分配了密钥:

certificate.PrivateKey = rsa;

问题是我收到以下异常:System.Security.Cryptography.CryptographicException : ASN1 corrupted data.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

.net – System.Security.Cryptography.X509Certificates.X509Certificate2在目标框架版本中不可用

.net – System.Security.Cryptography.X509Certificates.X509Certificate2在目标框架版本中不可用

我安装了VS2015 RTM和VS2013 Update 5 RTM.现在我的解决方案没有构建,因为我的接口具有返回类型X509Certificate2.现在我的假货不是建造的.我还创建了一个测试项目,我遇到了同样的问题,所以这不是我的解决方案.我收到的消息是:

Cannot generate stub for ClassLibrary1.Interfaces.ICertificateProvider: method System.Security.Cryptography.X509Certificates.X509Certificate2 ClassLibrary1.Interfaces.ICertificateProvider.getbla() unstubbable: method is abstract and Could not be stubbed,type System.Security.Cryptography.X509Certificates.X509Certificate2 is not available in the target framework version.

现在我卸载了VS2015 RTM,但问题仍然存在.当我用返回类型注释掉该方法时,证书一切正常.当我取消注释时,问题出在那里.

更新1
我刚在另一个系统上测试了这个.首先,我尝试使用VS2013 Update 4和VS2015 RC.有了这个设置一切都很好.然后我在该系统上安装了Update 5 RTM,然后它不再工作了.所以Update 5一定是问题所在!
结束更新

重现:
使用.Net Framework 4.5.1创建包含2个类库和1个测试项目的解决方案.
在类库1中创建一个接口.

namespace ClassLibrary1.Interfaces
{
    public interface ICertificateProvider
    {
        // Comment this line so you can build your fakes assembly...
        X509Certificate2 getbla();
    }
}

在第二个类库中创建一个类.实现接口并添加对第一个类库的引用.

namespace ClassLibrary1
{
    public class CertificateProvider :   ClassLibrary1.Interfaces.ICertificateProvider
    {
        public X509Certificate2 getbla()
        {
            throw new NotImplementedException();
        }
    }
}

为unittest项目中的接口项目添加fakes程序集.在测试中通过以下代码:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using ClassLibrary1.Interfaces.Fakes;

namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            StubICertificateProvider provider = new StubICertificateProvider();
        }
    }
}

现在您的项目将无法构建.如果您在项目将构建的界面中注释该方法.
在.fakes文件中启用诊断以获取错误消息.

谁有解决方案?

更新2
更改使用.Net Framework 4.6的解决方案.更改为4.5.2不起作用.

更新3
链接到Github的官方错误:
https://github.com/dotnet/coreclr/issues/1303

我刚刚将测试项目更新到.NET 4.6,它运行良好.在那之后我有几个内部类,这些假货是不可见的,所以使用

[assembly:InternalsVisibleT

在AssemblyConfig.cs中最好让它最终运行.

asp.net – X509Certificate2 – 系统找不到指定的路径

asp.net – 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 = Encoding.UTF8.GetBytes(headerSerialized);
        var headerEncoded = Convert.ToBase64String(headerBytes);

        // encoded claimset
        var claimsetSerialized = ser.Serialize(claimset);
        var claimsetBytes = Encoding.UTF8.GetBytes(claimsetSerialized);
        var claimsetEncoded = Convert.ToBase64String(claimsetBytes);

        // input
        var input = headerEncoded + "." + claimsetEncoded;
        var inputBytes = Encoding.UTF8.GetBytes(input);

        // signiture
        var rsa = certificate.PrivateKey as RSACryptoServiceProvider;
        var cspParam = new CspParameters
        {
            KeyContainerName = rsa.CspKeyContainerInfo.KeyContainerName,KeyNumber = rsa.CspKeyContainerInfo.KeyNumber == KeyNumber.Exchange ? 1 : 2,Flags = CspProviderFlags.UseMachineKeyStore
        };
        var aescsp = new RSACryptoServiceProvider(1024,cspParam) { PersistKeyInCsp = false };
        var signatureBytes = aescsp.SignData(inputBytes,"SHA256");
        var signatureEncoded = Convert.ToBase64String(signatureBytes);

        // jwt
        var jwt = headerEncoded + "." + claimsetEncoded + "." + signatureEncoded;

        var client = new WebClient();
        client.Encoding = Encoding.UTF8;
        var uri = "https://accounts.google.com/o/oauth2/token";
        var content = new NameValueCollection();

        content["assertion"] = jwt;
        content["grant_type"] = "urn:ietf:params:oauth:grant-type:jwt-bearer";

        string response = Encoding.UTF8.GetString(client.UploadValues(uri,"POST",content));

        JsonGoogleResponse result = (ser.Deserialize<JsonGoogleResponse>(response));



        return result.access_token;
    }

这是堆栈:

à   System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
  à System.Security.Cryptography.SafeProvHandle._FreeCSP(IntPtr pProvCtx)
  à System.Security.Cryptography.SafeProvHandle.ReleaseHandle()
  à System.Runtime.InteropServices.SafeHandle.InternalFinalize()
  à System.Runtime.InteropServices.SafeHandle.dispose(Boolean disposing)
  à System.Runtime.InteropServices.SafeHandle.Finalize()

解决方法

如果您在IIS中运行,则需要在应用程序池的高级设置中将“加载用户配置文件”设置为True,以便能够通过文件名和文件加载证书.密码.

ASP.NET使用X509Certificate2出现一系列问题的解决方法

ASP.NET使用X509Certificate2出现一系列问题的解决方法

在做微信支付退款的时候,由于需要使用到p12证书,结果就遇到一系列的坑。这里做个记录方便以后查阅。

原先加载证书的代码:

复制代码 代码如下:
1 X509Certificate2 cert = new X509Certificate2(path + WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);2 Request.ClientCertificates.Add(cert);

在vs 上测试通过。但是部署到IIS上一直报这个问题:

复制代码 代码如下:
System.Security.Cryptography.CryptographicException: 系统找不到指定的文件。

详细Stack Trace信息:

在 System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
在 System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx)
在 System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
在 System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
在 TenpayCore.HttpService.Post(TenpayException& tpEx, Byte[] xml, String url, Boolean isUseCert, Int32 timeout)。

反复测试之后,确认不是代码跟文件路径的问题。在查询微软的文档后发现了相关说明,指明了问题所在,以下分享一下我的操作流程。

1.将证书安装上去

点击 [开始] -> [运行] -> 键入[mmc] 进入“控制台”界面 -> 选择[文件] -> [添加/删除管理单元](Ctrl+M)

选择 [证书] -> [计算机账户] -> [下一步] -> [完成]

选择 [证书] -> [导入]

导入你的证书文件

2.授权证书

先安装 winhttpcertcfg.exe 工具(Windows HTTP Services Certificate Configuration Tool)。安装完成之后在该工具在C:\Program Files (x86)\Windows Resource Kits\Tools 或者C:\Program Files\Windows Resource Kits\Tools 文件夹下。打开cmd键入命令:

复制代码 代码如下:
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "你的证书名称" -a "你的iis账号标识"

-g 指令 就是授权

-c 是指证书所在的存储区

另外,证书的名称就是这个,如图所示 而不是其他什么东西,我就是搞错了,点击这个证书的详情取了里面的名称,导致授权不成功。

而iis账号标识,是指站点对应的应用程序池,高级设置里有标识这个选项来选择对应的用户。当时我授权的标识是Network Service,而应用程序池中的标识ApplicationPoolIdentity,结果导致我发起请求时出现了:

复制代码 代码如下:
System.Net.WebException: 请求被中止: 未能创建 SSL/TLS 安全通道。

3.修改代码

做完这些配置之后修改一下之前加载证书的代码。

复制代码 代码如下:
1 X509Store store = new X509Store("My", StoreLocation.LocalMachine);2 store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);3 4 System.Security.Cryptography.X509Certificates.X509Certificate2 cert = 5 store.Certificates.Find(X509FindType.FindBySubjectName, "你的证书名称", false)[0];

再测试一下,终于成功!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:

今天关于如何从Java的X509Certificate中提取CN?java提取方法的介绍到此结束,谢谢您的阅读,有关.Net Core 3.1 如何在 X509Certificate2 对象中导入 .cert 和 .key 文件?、.net – System.Security.Cryptography.X509Certificates.X509Certificate2在目标框架版本中不可用、asp.net – X509Certificate2 – 系统找不到指定的路径、ASP.NET使用X509Certificate2出现一系列问题的解决方法等更多相关知识的信息可以在本站进行查询。

本文标签:

上一篇chrome中的jQuery ajax问题(chrome ajax请求)

下一篇Java中的Word文档创建API(java创建doc文件)