在自己签发CA证书和颁发X509证书时,私钥通过下面的方法保存为PEM 相关代码可以已经提交在了 https://github.com/q2g/q2g-helper-pem-nuget/pull/13

  public static void SavePem(this X509Certificate2 @this, out string cert, out   string privateKey)
{
cert = string.Empty;
privateKey = string.Empty;
try
{
if (@this.HasPrivateKey)
{
#if NET452
var p = (@this.PrivateKey as RSACryptoServiceProvider).ExportParameters(true);
#else var p = @this.GetRSAPrivateKey().ExportParameters(true);
#endif
var key = new RsaPrivateCrtKeyParameters(
new Org.BouncyCastle.Math.BigInteger(, p.Modulus), new Org.BouncyCastle.Math.BigInteger(, p.Exponent), new Org.BouncyCastle.Math.BigInteger(, p.D),
new Org.BouncyCastle.Math.BigInteger(, p.P), new Org.BouncyCastle.Math.BigInteger(, p.Q), new Org.BouncyCastle.Math.BigInteger(, p.DP), new Org.BouncyCastle.Math.BigInteger(, p.DQ),
new Org.BouncyCastle.Math.BigInteger(, p.InverseQ));
using (var stringWriter = new StringWriter())
{
var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(stringWriter);
pemWriter.WriteObject(key);
privateKey = stringWriter.GetStringBuilder().ToString();
}
}
cert = PemCertificateHelper.ExportCertificateToPEM(@this);
}
catch (Exception ex)
{
throw new Exception($"Certificate could not be saved. ", ex);
}
} public static void SavePem(this X509Certificate2 @this, string certFile, string privateKeyFile = null)
{
try
{
Directory.CreateDirectory(Path.GetDirectoryName(certFile));
if (!string.IsNullOrEmpty(privateKeyFile) && @this.HasPrivateKey)
{
Directory.CreateDirectory(Path.GetDirectoryName(privateKeyFile));
#if NET452
var p = (@this.PrivateKey as RSACryptoServiceProvider).ExportParameters(true);
#else var p = @this.GetRSAPrivateKey().ExportParameters(true);
#endif
var key = new RsaPrivateCrtKeyParameters(
new Org.BouncyCastle.Math.BigInteger(, p.Modulus), new Org.BouncyCastle.Math.BigInteger(, p.Exponent), new Org.BouncyCastle.Math.BigInteger(, p.D),
new Org.BouncyCastle.Math.BigInteger(, p.P), new Org.BouncyCastle.Math.BigInteger(, p.Q), new Org.BouncyCastle.Math.BigInteger(, p.DP), new Org.BouncyCastle.Math.BigInteger(, p.DQ),
new Org.BouncyCastle.Math.BigInteger(, p.InverseQ));
using (var sw = new StreamWriter(privateKeyFile))
{
var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(sw);
pemWriter.WriteObject(key);
}
}
File.WriteAllText(certFile, PemCertificateHelper.ExportCertificateToPEM(@this));
}
catch (Exception ex)
{
throw new Exception($"Certificate could not be saved. cert: {certFile} - key: {privateKeyFile}", ex);
}
}

.Net Core 中X509Certificate2 私钥保存为 pem 的方法的更多相关文章

  1. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  2. JavaScript在浏览器中把文本保存为文件的方法

    JavaScript在浏览器中把文本保存为文件的方法 经过测试第二种方法可以保存更多的文本不至于卡死 var saveTextAsFile1 = function (text, fileName, s ...

  3. OPENSSL中RSA私钥文件(PEM格式)解析【一】

    http://blog.sina.com.cn/s/blog_4fcd1ea30100yh4s.html 在PKCS#1 RSA算法标准中定义RSA私钥语法为: RSAPrivateKey ::= S ...

  4. asp.net core中遇到需要自定义数据包解密方法的时候

    最近将公司的项目用.netcore重写, 服务的http外部接口部分收发消息是DES加解密的, 那么在asp.net core mvc的action处理之前需要加入解密这个步骤. 我第一想到的是用fi ...

  5. [小技巧]EF Core中如何获取上下文中操作过的实体

    原文地址:https://www.cnblogs.com/lwqlun/p/10576443.html 作者:Lamond Lu 源代码:https://github.com/lamondlu/EFC ...

  6. Net Core中数据库事务隔离详解——以Dapper和Mysql为例

    Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...

  7. ASP.NET CORE中使用Cookie身份认证

    大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cook ...

  8. .NET Core中的数据保护组件

    原文地址: PREVENTING INSECURE OBJECT REFERENCES IN ASP.NET CORE 2.0 作者: Tahir Naushad 背景介绍 在 OWASP(开放式 W ...

  9. .NET Core中复制源文件夹下的所有内容到新文件夹

    .NET Core中没有原生的复制文件夹方法,我们可以自己写个: 新建一个.NET Core控制台项目,示例代码如下: using System; using System.IO; namespace ...

随机推荐

  1. BZOJ1443 游戏game (二分图染色+匈牙利算法)

    先对整幅图进行二分图染色,再跑一遍匈牙利算法.如果最大匹配数=点数*2,那么输出WIN. 对于任何一个非必须在最大匹配上的点,即为所求的点. Program Test375num2; type arr ...

  2. 中缀表达式转逆波兰式(后缀表达式)求值 C++ Stack

    给一个包含小数的中缀表达式 求出它的值 首先转换为后缀表达式然后利用stack求出值 转换规则: 如果字符为'('  push else if 字符为 ')' 出栈运算符直到遇到‘(' else if ...

  3. 洛谷—— P2733 家的范围 Home on the Range

    https://www.luogu.org/problem/show?pid=2733 题目背景 农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛.(因 ...

  4. HDU 3681

    也算难题,难在如何处理有些点可以无限次经过 问题. 这道题,其实很容易想到二分+TSP的状态压缩,但在处理上述问题时,确实没想到.题解是处理每一个Y或G或F点到其他YGF点的距离,BFS,这样就出现一 ...

  5. SolrCloud 分布式集群部署步骤

    https://segmentfault.com/a/1190000000595712 SolrCloud 分布式集群部署步骤 solr solrcloud zookeeper apache-tomc ...

  6. NS3网络仿真(5): 数据包分析

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在我们生成的xml文件里.是不包括生成的数据包的数据的,在我们的脚本中加入以下的语句: point ...

  7. springboot-quartz 实现动态添加,修改,删除,暂停,恢复等功能

    任务相关信息:springboot-quartz普通任务与可传参任务 一.任务实体类 package cloud.app.prod.home.quartz; import java.io.Serial ...

  8. WPF学习笔记——没有前途的WPF

    看上去,WPF比silverlight有前途一点.毕竟,微软还没有宣布,WPF停止更新. 但我怀疑,不久的将来,WPF也会步其子集silverlight的后尘,要么不再出后续版本,要么向HTML5 + ...

  9. 线性回归(最小二乘法、批量梯度下降法、随机梯度下降法、局部加权线性回归) C++

    We turn next to the task of finding a weight vector w which minimizes the chosen function E(w). Beca ...

  10. 0605-类的继承、重写、parent、final

    定义一个子类(man) //定义一个类 class renlei{ var $name = '王五'; var $age = ''; var $sex = ''; var $todo = ''; fu ...