相关疑难解决方法(0)

将私钥/公钥从X509证书导出到PEM

有没有方便的方法从使用.NET Core的 PEM格式的.p12证书导出私钥/公钥?没有在低级别操作字节?我用谷歌搜索了几个小时,几乎没有任何东西在.net核心中可用,或者它没有记录在任何地方..

我们有一个X509Certificate2

var cert = new X509Certificate2(someBytes, pass);
var privateKey = cert.GetRSAPrivateKey();
var publicKey = cert.GetRSAPublicKey();
// assume everything is fine so far
Run Code Online (Sandbox Code Playgroud)

现在我需要将密钥导出为两个单独的PEM密钥.我已经尝试PemWriter过BouncyCastle,但是这些类型与Core的System.Security.Cryptography不兼容..没有运气.

- -编辑 - -

换句话说,我找到了一种方法来写这个:

$ openssl pkcs12 -in path/to/cert.p12 -out public.pub -clcerts -nokeys
$ openssl pkcs12 -in path/to/cert.p12 -out private.key -nocerts
Run Code Online (Sandbox Code Playgroud)

有人有想法吗?

谢谢 ...

c# x509certificate2 pem .net-core

8
推荐指数
2
解决办法
8872
查看次数

从.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
查看次数

c# https 调用,使用 crt 和带有密码的密钥文件

我有一个 crt 和密钥文件以及密码。

我通过 Postman 成功使用这些来调用外部 API。我如何在 C# 中执行此操作?

我看到了将 X509Certificate 与 httpclient 一起使用的示例,但没有看到构造函数的任何选项,我可以在其中使用 2 个文件并设置密码

c# https httpclient x509certificate

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

无法导入 RSA 私钥:“提供程序的版本错误”

我有一个随机私钥 ( "C:\tmp\private.key"):

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDHikastc8+I81zCg/qWW8dMr8mqvXQ3qbPAmu0RjxoZVI47tvs
kYlFAXOf0sPrhO2nUuooJngnHV0639iTTEYG1vckNaW2R6U5QTdQ5Rq5u+uV3pMk
7w7Vs4n3urQ6jnqt2rTXbC1DNa/PFeAZatbf7ffBBy0IGO0zc128IshYcwIDAQAB
AoGBALTNl2JxTvq4SDW/3VH0fZkQXWH1MM10oeMbB2qO5beWb11FGaOO77nGKfWc
bYgfp5Ogrql4yhBvLAXnxH8bcqqwORtFhlyV68U1y4R+8WxDNh0aevxH8hRS/1X5
031DJm1JlU0E+vStiktN0tC3ebH5hE+1OxbIHSZ+WOWLYX7JAkEA5uigRgKp8ScG
auUijvdOLZIhHWq7y5Wz+nOHUuDw8P7wOTKU34QJAoWEe771p9Pf/GTA/kr0BQnP
QvWUDxGzJwJBAN05C6krwPeryFKrKtjOGJIniIoY72wRnoNcdEEs3HDRhf48YWFo
riRbZylzzzNFy/gmzT6XJQTfktGqq+FZD9UCQGIJaGrxHJgfmpDuAhMzGsUsYtTr
iRox0D1Iqa7dhE693t5aBG010OF6MLqdZA1CXrn5SRtuVVaCSLZEL/2J5UcCQQDA
d3MXucNnN4NPuS/L9HMYJWD7lPoosaORcgyK77bSSNgk+u9WSjbH1uYIAIPSffUZ
bti+jc1dUg5wb+aeZlgJAkEAurrpmpqj5vg087ZngKfFGR5rozDiTsK5DceTV97K
a3Y+Nzl+XWTxDBWk4YPh2ZlKv402hZEfWBYxUDn5ZkH/bw==
-----END RSA PRIVATE KEY-----  
Run Code Online (Sandbox Code Playgroud)

我尝试使用RSACryptoServiceProvider.ImportCspBlob导入它,但失败并显示错误:

System.Security.Cryptography.CryptographicException:提供程序的错误版本。

完整的堆栈跟踪:

Failed: System.Security.Cryptography.CryptographicException: Bad Version of provider.

   at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
   at System.Security.Cryptography.Utils._ImportCspBlob(Byte[] keyBlob, SafeProvHandle hProv, CspProviderFlags flags, SafeKeyHandle& hKey)
   at System.Security.Cryptography.Utils.ImportCspBlobHelper(CspAlgorithmType keyType, Byte[] keyBlob, Boolean publicOnly, CspParameters& parameters, Boolean randomKeyContainer, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
   at System.Security.Cryptography.RSACryptoServiceProvider.ImportCspBlob(Byte[] keyBlob)
   at ConsoleApplication3.Program.DecodeRSA(Byte[] data, Int32 c_data) in C:\Users\myuser\Documents\Visual Studio 2015\Projects\myproj\ConsoleApplication3\Program.cs:line 28
   at ConsoleApplication3.Program.Main(String[] args) in …
Run Code Online (Sandbox Code Playgroud)

c# rsa

5
推荐指数
2
解决办法
2556
查看次数

从Cert和Key创建X509Certificate2,而无需创建PFX文件

过去,我一直通过导出带有密码的PFX证书来确保TcpListener的安全,但是我想知道是否可以跳过此步骤。

我没有使用商业SSL证书,而是使用了根CA颁发服务器证书。这些服务器证书在C#中托管TcpListener时需要其他步骤(我想是因为未使用CSR)...但是,如果我确实拥有私钥和OpenSSL生成/使用的证书,该怎么办。

sslCertificate = new X509Certificate2("myExportedCert.pfx", "1234");
Run Code Online (Sandbox Code Playgroud)

因此,这很好,但是我必须发出openssl命令,以根据证书和私钥创建pfx文件,然后输入一些密码。然后在我的代码中包含此密码。

我想知道此步骤是否必要。有没有办法从Cert组成X509Certificate2,然后应用私钥。构造函数参数仅允许Cert部分使用,但是由于没有私钥,因此加密失败。

另外,我不想依靠OpenSSL或IIS导出pfx。...似乎很笨拙。

理想情况下,我想:

sslCertificate = new X509Certificate2("myCert.crt");
sslCertificate.ApplyPrivateKey(keyBytes) // <= or "private.key" or whatever

sslStream.AuthenticateAsServer(sslCertificate, false, SslProtocols.Default, false);
Run Code Online (Sandbox Code Playgroud)

ssl certificate x509certificate2

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

如何从包含 .Net Core 中的私钥/公钥的 PEM 文件中导入 PKCS1 密钥

我正在尝试使用 .Net Core 从 PEM 文件加载私钥和公钥。我的代码如下所示:

var localPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
var path = Path.Combine(localPath, this._configManager.JwtPem);
var rsaCryptoServiceProvider = new RSACryptoServiceProvider();

var linesList = File.ReadAllLines(path).ToList();
var line = string.Concat(linesList.GetRange(1, linesList.Count - 2));

rsaCryptoServiceProvider.ImportCspBlob(Convert.FromBase64String(line));
Run Code Online (Sandbox Code Playgroud)

我得到的例外是:

Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException : Bad Version of provider
   at Internal.NativeCrypto.CapiHelper.ImportKeyBlob(SafeProvHandle saveProvHandle, CspProviderFlags flags, Boolean addNoSaltFlag, Byte[] keyBlob, SafeKeyHandle& safeKeyHandle)
   at System.Security.Cryptography.RSACryptoServiceProvider.ImportCspBlob(Byte[] keyBlob)
   at StepNexusCA.ServiceLayer.Authorization.TokenService.GenerateToken(List`1 claims)
Run Code Online (Sandbox Code Playgroud)

包含我的开发私钥/公钥的 PKCS1 格式的 PEM 文件在这里:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwgs8kmIwk+4geRO7dGZjzYpgD2OiaUrnOOIk+ObXt/CcjhwX
lSst+jBmfMF1Wp/mF4aUQsePxN59MYV2BsqPLEkzVdq/fb/7V2wbZcooJAQKkJwT
emtYHrBN00KBBeu9uQZlFOw365ij4GrbP7mcr4tNFZ3TPnRFUUFqhvB6mEG1aZsb
lOn1lgL34tAycQHNxttXz/aGfPyTefQ+yISvSY2n8288OVlyfu6wKDONQYS+/stC
tCV+a+/dDUSUjaZsXM1+BMSflsINqIcCTCMvPa6fb5Z+USfPDcDNwzUyX20LBzH5
wFwPLIvuoqJeeczcaHaT+dS2ZZREj6kgUsdC+QIBAwKCAQEAgVzTDEF1t/QVpg0n
ou7tM7GVX5fBm4dE0JbDUJnlJUsTCWgPuMdz/CBEUyujkb/uulm4LIUKgz7+IQOk
BIcKHYYiOTx/qSqnj51nmTFwGAKxtb1iUZzlacrejNcArp0pJgRDY0glR7sX6vHn
f9ETH7IzY76M1E2Di4Dxr0r8ZX/3ozsrSXp+GMJLeN9sCjKSyxoE5Y71eDBTCX2N
tShJJjhqUDz61bhKlX9j5c3jWvTXx46dE8wjoJ/BW1XJo5J1gzHQ/OLYeOXIdxlj
jVSlEuU69UT588B7UEEK9N9xK5K/c0Yw5gd02RUv/o7qdpYQICeGtQMMaFkm75xy
nUOxwwKBgQD/orUvgNJfFKyvGY8XJTuek5q8IcFD8AFO3b7pNnPynw8llyEpACAv
Onf9aJSPZvtrabSqrpO8k8Ijyhe2Ino39GuRV8RURl46GmFN31RoYV1wHI4K7Emh
68cdKbCEBudog+kImImldBAfo+QmBtqhS+u4B5qQwwnFa8DriQoiYwKBgQDCUg0r
Jd/ZXDLXk/H5PHpTApmUVd7SWLLIDfkBAlRO8Sni4/Ka+KTTZDec5uoo0hoP6cCs …
Run Code Online (Sandbox Code Playgroud)

security openssl rsa pem .net-core

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

将 cert 转换为 pfx 或 p12 文件格式

在 Windows Server 2016 上使用 powershell 将 .crt、.csr 和 .key 文件转换为 .pfx 或 .p12。

我有 .cert、.csr 和 .key 文件。但为了执行“netsh http add sslcert ...”命令,我需要 .pfx 或 .p12 文件。我需要在 powershell 中完成此操作。Openssl 不是一个选项。

我已经使用 openssl 完成了上述操作。但我现在无法下载软件,所以这不再是一个选择。我正在寻找openssl pkcs12 -export -out domain.name.pfx -inkey key.key -in cert.crtpowershell 中的等效命令。

powershell certificate pfx p12

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

Pem证书中的私钥如何加密?

作为调试问题的一部分,我试图了解pem证书中私钥的加密方式,因为我想知道是否curl无法对私钥进行解密。

我的-----BEGIN ENCRYPTED PRIVATE KEY-----部分中有一个pem

它用密码加密了吗?还有其他某种加密方案吗?

更确切地说

一位同事建议,pem即使没有密码,也可以对私钥进行加密。这是对的吗?

encryption ssl curl pem

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