我想创建一个带有主题密钥标识符的 RSA 算法密钥大小 2048 的自签名证书。我知道我们在openssl.conf. 我想改变什么?
genrsa -des3 -out mcedt.key 2048
req -new -key mcedt.key -out mcedt.csr
CN = server.test , OU =, O =, L = Toronto, S = ontario , C = can
x509 -req -days 365 -in mcedt.csr -signkey mcedt.key -out mcedt.crt
pkcs12 -export -in mcedt.crt -inkey mcedt.key -out mcedt.pfx
Run Code Online (Sandbox Code Playgroud) 通过vb.net在系统中安装x509证书时出现问题。
安装本身是成功的,但是当我通过代码进行安装时,确实在“证书管理”窗口中获得了一个条目,如下所示:
但是,当我在“证书管理”窗口中使用导入功能手动安装它时,确实在此证书的列表中得到两个条目:
我面临的问题是,当我使用此证书执行某些任务(将某些信息传递给第三方服务)时,它仅在手动导入时才有效(证书列表中有两个条目)。看起来像通过代码安装证书时,它没有完全安装。我对用于安装证书的代码进行了大量研究,看起来很简单:
With ofd
.Title = "Select Certificate"
.FileName = ""
.CheckFileExists = True
If .ShowDialog <> Windows.Forms.DialogResult.Cancel Then
Dim cert As New X509Certificate2(.FileName, "xxxxxxx", X509KeyStorageFlags.UserKeySet)
Dim certStore As New X509Store(StoreName.My, StoreLocation.CurrentUser)
certStore.Open(OpenFlags.ReadWrite)
certStore.Add(cert)
certStore.Close()
End If
End With
Run Code Online (Sandbox Code Playgroud)
我想念什么吗?
我有一个智能卡读卡器。当我尝试访问接受客户端证书的网站时,浏览器会向我提供包含 2 或 3 个客户端证书的列表。
所有这些证书选项都与我的机器上使用的卡密切相关。
当我尝试通过 .NET 中的 X509Store 类访问这些选项时,我得到了 256 个选项。对于用户来说太多了,无法分类!
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
大多数用户不应选择以星号开头的证书,因此我可以轻松过滤掉 80% 左右的证书。例如:
*.amazonaws.com *.slashdotmedia.com *.msedge.net
我的问题是:如何将选项缩小到可管理的级别,例如我的浏览器(chrome),但来自 .NET ?
在 tmpAEC4.pfx 文件中,我在此消息的底部设置了表示证书的内容。当我尝试实例化 X509Certificate2 时:
var data = File.ReadAllBytes(@"C:\Temp\tmpAEC4.pfx");
new X509Certificate2(data, "9G8U922PWY");
Run Code Online (Sandbox Code Playgroud)
我收到以下异常
(System.Security.Cryptography.CryptographicException: 'An error occurred during encode or decode operation.):
Run Code Online (Sandbox Code Playgroud)
密码正确,就像我手动导入pfx一样,它可以工作。任何的想法?
证书:
MIILwgIBAzCCC3wGCSqGSIb3DQEHAaCCC20EggtpMIILZTCCBXIGCSqGSIb3DQEH
AaCCBWMEggVfMIIFWzCCBVcGCyqGSIb3DQEMCgECoIIE+jCCBPYwKAYKKoZIhvcN
AQwBAzAaBBRYH0IH869hSttnQkGSPYO8MxzqxAICBAAEggTIImUZkkLMC/XfOwba
SgTzP9XiKuW8Y+yaQ4lM3vQe6+6ibJSKIKg3mwrtUu8A1sYmf90++M+hWMechZPp
1JVPtTOVmah7HMFdpYZ/Ot2OUx2KaOutgPkw5kTzy9QAsC35cf6BI0cnrgI3DIkn
7ub5zPmzaNPa/nUd2tH4kBj+em4+HfKoL59Vu0DCowzLt9KMQlAzgPaMNOtoWP/H
j2y7km29sJlziaSTI/olihdWlL0jW7B5vF5kPfUEXGEriyi/uRqWMbxtL4cLM7A6
77NXHRIwZ5cK2exZG5MePO6AT9VLan/C7r0n0B9Jae3D7mD71UK0bb/pT/BBLSwz
qmGPXPtpmYcAnW/8BK7QerHTasKJ7YR0V0T7oXG3+sYiMJAZFKf2wSx7fm2ZKMTX
2V05KI00SPayQ1dPM0I1rg0glRNNWKWN37LeWOTfjxqm2fyjUmgBvFkoTR2Ltw1E
Jtd80oxmcMuiBfAO9iHGngTgpxLxppUdA+YRq+pUtOGnztCsu0HZmrwFkP5F87Ca
Jy3FwotK98cZMxSsVtPE/YRPYI+4VsysaGynytATLhy3MlAnKRttYKD+92IqBNAx
S8mP9e6MyiqzUOoIwWjQhvWqkzt4V1KGekjrhigUEVDCM290cTvVHFCZQWBFXT0I
tIKfYjc40oB1rD0v6HEjpivYC9Oaiek8Bc3nJ6iw6dwJppITT17SyTkOgZAtQDet
Eb6USYB//nUPkrA2fZB7Kj9GWlTskosdHcQR5uXRVYtot4v0OOqv/JaPvD2sJxcN
J3c57WXLLk7Wdv1eRyyJEZ5wvk1AxasUW5u/KOvnDJQL0yZJbYfSbgRnW61W5L9M
21C3chfIzjpxl04z20X+q4E+TMNBB4wEYHDP5bFbFJ7mqiWn7ucZ7h3f8HWl086S
c77i7oX0900V8uyMSLwPA/k24q01d0ByL1nIpl5Uf3zMZNc9jwz7K3gRpLvQO5Ns
X7iDVkzl47U6VCyf7NWE7rCIaiT4Z87+lWbB0bq9i01KUCJAIVbEGND6G/okZ4QH
5qeqTeVbkMBqfMvd0L5qK+EFRB2fVLlOp5Qpv0YPRq9amiiQwuiULOIPvjHFK27D
SAoMIXgGw88Nm5djnP5Gkbf75z2BNf3lLHwrxlagtdzhySVwxoaqDv709BDv/UDQ
F/8e3GhXP6bJeO8M+ebo1UDbSYmow7wmHVC28MhqPv6piwjmJ/1Vtm4In+166H9g
77caoOTI1MjSasw9KDEjRDWt1yk28KdrWkgZ0L/Ig51bOW+BsbhNQj50HrNpdef6
ekGWnHGV/Of8APVtgQA7lLt08Shm9ehXGMyyL6dlqAs5QQ9PlR19gkwY4lUAIsPo
T9SlB/g8BRckvGn1JJWnzATNet9IBYgzXhpXb0heTdKyxUjwQYQNQC2FCk9cJRei
bRwRFvJ49P4oF6hNt3POK2h5uvQ853LqNdzLh0b+2P4WQa/a8GJiW0Lya1SosFyJ
yMC1lE3BqnnCVYyQzf+N/zJPnMeQthw6JZq0HFtCCpRSDuEebDKjbM2+H2Zbq+1i
D4Ku/NFGDDgeRbo/KiWSs2YZ4nnlt2oZv+soZ9ITGVUu5gUqxaHpzG2EZ2xFD9AJ
vpFL0X5P3+p+PxigMUowIwYJKoZIhvcNAQkUMRYeFABJAEQAUAA1ADMAOQA4ADQA
MQA4MCMGCSqGSIb3DQEJFTEWBBRfXw+cg6e2vB7YSybZ2zFPl/fBpTCCBesGCSqG
SIb3DQEHBqCCBdwwggXYAgEAMIIF0QYJKoZIhvcNAQcBMCgGCiqGSIb3DQEMAQYw
GgQUfzi9rHhPfZ99fm7pe/wdY38JEyICAgQAgIIFmHCfOzQRau1sdNEG27q91Fhs
pp1v3KHV92OW5YevdM9pW4AIL5kB2c3T+TpxqWwGysnBh1EkPzM/GrB8TKyHqQOx
SPdSMSkT+ifCcRUF8YsZalHnc9tdnUlyZXnaLrSIAMJkAYAbi80vOfVtYb2I3+Ib
vDqTYoDS6sivFAsAqN0TAxwgzFs+VsNTMwi3gSaNu54vCxZwaV0vo+s2pBPDs9Qw
UNfVEqsuF7UDeyGHxIL/D+rmfKHTgqC9pXYueGMy1jtH4kOSyC2hvvIZEKz2xA3g
n5eLmH5SNmK4IzRbOcQlzPe6ffym/qmOjd2bAFwAC7sxUGCXVPvv5c9bf8Y7FaJR
TEflXmtsjX6U10hYNtelE3GI3AExtZYXnheQcGJzKPjctc6l5igCpLWxJ2dZlzTW
f5pM6Cf3WY5+Opy/C9KFLFm4Kyb5VDUesnv6UllvWQbPcDvQvuPyXGnSzz9sw0ba
bFb81m9h9gYhaur3wEcV6gkN4lpAuQMup6/G3zb2sszPNH1M227kS6KGoZo11rHE
WGrfx6CiQAuYbgzgpmTV8TzRKRtmdKxSCj8/w5zbnbyk+g8GymOXwb9e1n55eGzS
VQEivpwwJTTLiWrlm055aMrttwbnqqreFF6oQpi0IyI74mjHvtmj93xpJN8hioBS
4J2Pyt1ydfC0PBYagLjiXJYh/pUs/HUbyYhnfjy+tafYqXQAWsxnf6PbnL6GKFjO
y2HhtuC/FQLthFUFOI4p1ePyN/sN2M4Lk8bvhpqRti8igjoqp/M16y+V6Idd7zbZ
2Gz3GrKVemFfvoLmcpIyYA12EubT92aJPCkrnUvUgLmF2GQitHrjs9I2r4tTc01c
nDdGw+C3J2jza7QZd6FeJLdLQcrjHNbN+0PG91Nx7EHE1jDr9uxn/VTSUfoCYAAZ
wit9CPAC32PaY0C810dxCxdybbBHm7gAPrOi3IFHZCQ10o3RZcRsiVEcpli23ZtS
TbHXTf6pzJ4Q494hUXbgaVI/ZKHMTmsrsrHMCM/0xU2u4tNXIJeRbwNTY/Xgu/gI
Du5zuiGbGfVgee9FUT1MCQ2Foz/cJTQWQOELXH2/L29co1gQmwYMmSoAtxcauod9
fRrLTSLygInJiDSKh6Bk7Q4ApX6qi3MyKI1BuYBDRomve0Fx5l7VEOKdctOsL+/H
hZAppPgjvvzs9lYUm0F8COj0tPicabBg3px5QVb+p+tTkujl6dvDm+2f+eoaF8y4
QGuZFeMO/DVt+lnbR0G32qIpJqAmAos8s3GuFD0bxJd33bO2sL2JAcelSeW9kPY0
lhDuq6CqV6upQyo9ZEyl/oWyQ/BE7VjPP2hTl5dvcV0cCbVWWrMSKNJoJn0vEds6
F/4hK+a4aVr0yUbRKcgFkidnyS8y88yo67LNAwPoPOCgHNS9pWyTDBOa4KPAaBvn
QyM/afsyZXIP2nuQpbnVqmtHOPS6hQVlXFhethWWacsOOooPkGv8gIoGvoAf+t1T
JqzEfBbtPG7ziiUO0uXwR3rg622+0WmfT7dSFNkopqaJ4TsK6qgFKp7IinntEjS/ …Run Code Online (Sandbox Code Playgroud) 我的.Net核心应用程序使用HttpClient向外部Web服务发出发布请求。外部Web服务需要证书进行验证。
证书安装在AWS中,并且我有一个指向证书的ARN。
是否可以通过编程方式从AWS Certificate Manager获取证书并在我的HtppClient中使用它,例如,这是我通常用来添加证书但我需要从AWS获得证书的代码。
private HttpClientHandler HttpClientHandler()
{
var handler = new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption.Manual,
SslProtocols = SslProtocols.Tls12
};
handler.ClientCertificates.Add(new X509Certificate2("cert.crt")); //TODO: fetch from AWS.
return handler;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 GetSecretAsync() 方法从 Azure Key Vault 获取证书,然后我希望最终获得私钥和证书的 byte[]。
我的应用程序位于 .netcore3.1 这是我的代码的样子:
var certWithPrivateKey = Client.GetSecretAsync(ConfigurationSettings.AppSettings["AKVEndpoint"], ConfigurationSettings.AppSettings["CertName"]).GetAwaiter().GetResult();
var privateKeyBytes = Convert.FromBase64String(certWithPrivateKey.Value);
X509Certificate2 x509Certificate = new X509Certificate2(privateKeyBytes);
var privateKey = x509Certificate.GetRSAPrivateKey() as RSA;
Run Code Online (Sandbox Code Playgroud)
我得到了 RSACng 类型的有效私钥,但任何操作(尝试过 ExportRSAPrivateKey())都会引发“'privateKey.ExportRSAPrivateKey()' 引发类型为 'Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException'” 的错误和“The不支持请求的操作。”
我不知道接下来如何继续获取私钥和证书的字节[]。
我想从其序列化形式加载证书请求 (CSR) 并对其进行签名。这在纯 .NET 中可能吗?
CSR 如下所示:
-----BEGIN CERTIFICATE REQUEST-----
MIIDejCCAmICAQAwZTE0MDIGCgmSJom....
-----END CERTIFICATE REQUEST-----
Run Code Online (Sandbox Code Playgroud)
它是使用 .NET 4.7.2 生成的CertificateRequest,类似于这个问题的答案:
Generate and Sign Certificate Request using pure .net Framework
然后将序列化的 CSR 发送到需要创建证书的服务器 - 问题是如何做到这一点。
我必须将软件部署到n个客户端,这些客户端将安装证书并使用它.我不想只部署两个文件(.pfx和exe)(包含.pfx的.exe).
我现在正在做的是从一个位置导入证书.
X509Certificate2^ x509 = gcnew X509Certificate2;
x509->Import( "C:\\Tmp\\certficate.pfx" );
Run Code Online (Sandbox Code Playgroud)
可能吗 ?
我们有什么方法可以使用AD服务器中的c#来获取X509公共证书来加密电子邮件.现在我正在使用本地商店提取证书和加密邮件.
static public X509Certificate2 GetRecipientCertPublic(string recipientName)
{
X509Store storeAddressBook =
new X509Store(StoreName.AddressBook, StoreLocation.CurrentUser);
storeAddressBook.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certColl =
storeAddressBook.Certificates.Find(X509FindType.FindBySubjectName, recipientName, false);
storeAddressBook.Close();
if (certColl.Count != 0)
{
return certColl[0];
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所看到的Outlook中的行为不同.即使Recipeint的公共证书不在本地机器证书管理器中.它能够从组织的中心服务器或广告服务器(我不是很确定)中获取公共证书并发送加密邮件.
我想验证证书密码。此时我有基于处理 CryptographicException 和检查异常消息的代码。但这种方法取决于英语文化信息。
public bool VerifyPassword(byte[] fileContent, string password)
{
try
{
var certificate = new X509Certificate2(fileContent, password);
}
catch (CryptographicException ex)
{
if (ex.Message.StartsWith("The specified network password is not correct."))
{
return false;
}
throw;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我一直在寻找如何验证证书密码的其他解决方案,但没有成功。
如何验证证书密码的正确方法是什么?
我很感激任何想法......
以前,我有一个面向应用程序的框架4.5.1,并使用Web Reference添加了WCF服务。这可以完美运行,并且能够通过服务器成功进行身份验证。
旧代码:
ServicePointManager.Expect100Continue = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
IService orderService = new Service();
// private method to load certificate
var cert = LoadCertificate(@"....\00050._.1.p12", "pwd");
oIPGApiOrderService.ClientCertificates.Add(cert);
oIPGApiOrderService.Url = @"service_url";
NetworkCredential nc = new NetworkCredential("username", "pwd");
oIPGApiOrderService.Credentials = nc;
Run Code Online (Sandbox Code Playgroud)
现在,我要升级到.net core 2.0,并以.net standard 2.0为目标。我已经添加了该服务正在使用服务引用(连接的服务)。生成的代码已更改,其中使用了通道工厂等。
新代码:
ServicePointManager.Expect100Continue = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
System.ServiceModel.BasicHttpBinding result = new System.ServiceModel.BasicHttpBinding();
result.MaxBufferSize = int.MaxValue;
result.ReaderQuotas = System.Xml.XmlDictionaryReaderQuotas.Max;
result.MaxReceivedMessageSize = int.MaxValue;
result.AllowCookies = true;
result.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.Transport;
IService client = new Service(result, new EndpointAddress("service_url"));
client.ClientCredentials.ClientCertificate.Certificate = new …Run Code Online (Sandbox Code Playgroud) 我在一个字符串里面有X509签名证书,如:
var signingCertificate = -----BEGIN CERTIFICATE-----\r\nMIICTjCCAbegAw.........-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
现在我想阅读这个证书的内容.我知道我们可以使用X509Certificate2对象,但直接从文件读取.反正有没有从字符串中读取内容?
asp.net ssl-certificate x509certificate2 x509certificate asp.net-core
在Security Cryptography X509Certificates的上下文中,我在其中一个项目代码中遇到了这个问题.
X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
Run Code Online (Sandbox Code Playgroud)
这是什么"|" 管意味着什么?
x509certificate2 ×13
c# ×5
.net ×4
certificate ×4
.net-core ×2
asp.net ×2
asp.net-core ×2
aws-sdk ×1
c++-cli ×1
cryptography ×1
encryption ×1
exe ×1
openssl ×1
pfx ×1
private-key ×1
vb.net ×1
wcf ×1
x509 ×1