在本文中,我们将给您介绍关于如何从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提取方法)
- .Net Core 3.1 如何在 X509Certificate2 对象中导入 .cert 和 .key 文件?
- .net – System.Security.Cryptography.X509Certificates.X509Certificate2在目标框架版本中不可用
- asp.net – X509Certificate2 – 系统找不到指定的路径
- ASP.NET使用X509Certificate2出现一系列问题的解决方法
如何从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 文件??
这是我第一次处理带有证书的代码。
我的问题是,我需要使用拆分为 .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在目标框架版本中不可用
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
[assembly:InternalsVisibleT
在AssemblyConfig.cs中最好让它最终运行.
asp.net – X509Certificate2 – 系统找不到指定的路径
当我第一次启动应用程序时,一切正常,我可以访问数据.但是,当我第二次启动应用程序时,出现以下错误:“系统找不到指定的路径”.你有个主意吗?我以为它可以锁定.
这是我的源代码:
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()
解决方法
ASP.NET使用X509Certificate2出现一系列问题的解决方法
在做微信支付退款的时候,由于需要使用到p12证书,结果就遇到一系列的坑。这里做个记录方便以后查阅。
原先加载证书的代码:
在vs 上测试通过。但是部署到IIS上一直报这个问题: