使用openssl将.pfx文件中的私钥获取出来_Enetaunt的博客-程序员宅基地_openssl pfx

技术标签: RSA  C#之接收json数据处理  

原文:https://blog.csdn.net/problem2050/article/details/50528704
方法1:

原版PFX证书

openssl pkcs12 -in myssl.pfx -nodes -out server.pem (使用这步骤就ok了,因为pem格式可以打开了)
这里写图片描述

提取私钥
openssl rsa -in server.pem -out server.key

提出公钥

openssl x509 -in server.pem -out server.crt

方法2:

2.从pfx提取密钥信息,并转换为key格式(pfx使用pkcs12模式补足)

(1)提取密钥对
openssl pkcs12 -in 1.pfx -nocerts -nodes -out 1.key
//如果pfx证书已加密,会提示输入密码。如果cer证书没有安装,则密码没法验证

(2)从密钥对提取私钥
openssl rsa -in 1.key -out 1_pri.key

(3)从密钥对提取公钥
openssl rsa -in 1.key -pubout -out 1_pub.key

(4)因为RSA算法使用的是pkcs8模式补足,需要对提取的私钥进一步处理
openssl pkcs8 -topk8 -inform PEM -in 1_pri.key -outform PEM -nocrypt

   复制窗口中生成的密钥,保存为1_pri_pkcs8.key

(5)得到密钥对1_pri_pkcs8.key和1_pub.key

pkcs8格式的私钥转换工具。它处理在PKCS#8格式中的私钥文件。它可以用多样的PKCS#5 (v1.5 and v2.0)和 PKCS#12算法来处理没有解密的PKCS#8 PrivateKeyInfo格式和EncryptedPrivateKeyInfo格式。
用法:
[cpp] view plaincopy
openssl pkcs8 [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename]
[-passout arg] [-topk8] [-noiter] [-nocrypt] [-nooct] [-embed] [-nsdb] [-v2 alg] [-v1 alg] [-engine id]
选项说明:
-inform PEM|DER::输入文件格式,DER或者PEM格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。
-outform DER|PEM:输出文件格式,DER或者PEM格式。
-in filename:输入的密钥文件,默认为标准输入。如果密钥被加密,会提示输入一个密钥口令。
-passin arg:输入文件口令保护来源。
-out filename:输出文件,默认为标准输出。如果任何加密操作已经执行,会提示输入一个密钥值。输出的文件名字不能和输入的文件名一样。
-passout arg:输出文件口令保护来源。
-topk8:通常的是输入一个pkcs8文件和传统的格式私钥文件将会被写出。设置了此选项后,位置转换过来:输入一个传统格式的私钥文件,输出一个PKCS#8格式的文件。
-noiter:MAC保护计算次数为1。
-nocrypt:PKCS#8密钥产生或输入一般用一个适当地密钥来加密PKCS#8 EncryptedPrivateKeyInfo结构。设置了此选项后,一个不加密的PrivateKeyInfo结构将会被输出。这个选项一直不加密私钥文件,在绝对必要的时候才能够使用。某些软件例如一些JAVA代码签名软件使用不加密的私钥文件。
-nooct:这个选项产生的RSA私钥文件是一个坏的格式,一些软件将会使用。特别的是,私钥文件必须附上一个八位组字符串,但是一些软件仅仅包含本身的结构体没有使八位组字符串所环绕。不采用八位组表示私钥。
-embed:这个选项产生的RSA私钥文件是一个坏的格式。在私钥结构体中采用嵌入式DSA参数格式。在这个表单中,八位组字符串包含了ASN1 SEQUENCE中的两种结构:一个SEQUENCE包含了密钥参数,一个ASN1 INTEGER包含私钥值。
-nsdb:这个选项产生的RSA私钥文件是一个坏的格式并兼容了Netscape私钥文件数据库。采用NetscapeDB的DSA格式。
-v2 alg:采用PKCS#5 v2.0,并指定加密算法,默认的是PKCS#8私钥文件被叫做B(该算法用56字节的DES加密但是在PKCS#5 v1.5中有更加强壮的加密算法)的加密算法用口令进行加密。用B<-v2>选项,PKCS#5 v2.0相关的算法将会被使用,可以是des3(168字节)和rc2(128字节),推荐des3。
-v1 alg:采用PKCS#5 v1.5或pkcs12,并指定加密算法。可采用的算法见下面。
-engine id:指定硬件引擎。
注意:
加密了的PEM编码PKCS#8文件表单用下面的头部和尾部:
—–BEGIN ENCRYPTED PRIVATE KEY—–
—–END ENCRYPTED PRIVATE KEY—–
未加密的表单用:
—–BEGIN PRIVATE KEY—–
—–END PRIVATE KEY—–
跟传统的SSLeay算法相比,用PKCS#5 v2.0系列的算法加密私钥,有更高的安全性以及迭代次数。于是附加的安全性是经过深思熟虑的。
默认的加密算法仅仅是56字节的,是因为它是PKCS#8所支持的最好的方法。
有一些软件使用PKCS#12基于密钥的加密算法来加密PKCS#8格式的私钥:它们会自动的处理但是没有选项来操作。
在PKCS#8格式中,有可能的是输出DER编码格式的经过加密的私钥文件,是因为加密的详细说明包含在DER等级中,相反的是传统的格式包含在PEM邓丽中。
PKCS#5 v1.5和 PKCS#12 算法:
各种各样的算法可以被选项-v1所使用。包含PKCS#5 v1.5和 PKCS#12 算法。详细描述如下:
B:这两个算法包含在PKCS#5 v1.5中。它们仅仅提供56字节的保护,加密算法用DES。
B:它们在传统的PKCS#5 v1.5中没有被提到,但是它们用同样地密钥引出算法,被一些软件所支持。在PKCS#5 v2.0中所提到。它们使用64字节的RC2以及56字节的DES。
B:它们是PKCS#12基于密钥的加密算法,它们允许使用高强度的加密算法,例如3des或128位的RC2。
实例:
用3des算法将传统的私钥文件转换为PKCS#5 v2.0:
[cpp] view plaincopy
openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem

用PKCS#5 1.5兼容的DES算法将私钥文件转换为pkcs8文件:
[html] view plaincopy
openssl pkcs8 -in ocspserverkey.pem -topk8 -out ocspkcs8key.pem

用PKCS#12兼容的3DES算法将私钥文件转换为pkcs8文件:
[html] view plaincopy
openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES

读取一个DER格式加密了的PKCS#8格式的私钥:
[cpp] view plaincopy
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem

转换一个PKCS#8格式的私钥到传统的私钥:
[cpp] view plaincopy
openssl pkcs8 -in pk8.pem -out key.pem

pkcs8中的私钥以明文存放:
[html] view plaincopy
openssl pkcs8 -in ocspserverkey.pem -topk8 -nocrypt -out ocspkcs8key.pem

标准:
PKCS#5 v2.0的测试向量的实现是以通告的形式用高强度的迭代次数算法3DES、DES和RC2来加密的。很多人要确认能够解密产生的私钥。
PKCS#8格式的DSA私钥文件没有备注文件中的:在PKCS#11 v2.01中的11.9节被隐藏了的。OpenSSL的默认DSA PKCS#8私钥格式隐藏在这个标准中。
BUGs:
必须有一个选项打印使用的加密算法的其他详细细节,例如迭代次数。
PKCS#8用3DES和PKCS#5 v2.0必须是默认的私钥文件:目前为了命令的兼容性。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39885282/article/details/79933867

智能推荐

32`vi`_终端中的编辑器

vi —— 终端中的编辑器 目标 vi 简介 打开和新建文件 三种工作模式 常用命令 分屏命令 常用命令速查图 01. vi 简介 1.1 学习 vi 的目的 在工作中,要对 服务器 上的文件进行 简单 的修改,可以使用 ssh 远程登录到服务器上,并且使用 vi 进行快速的编辑即可 常见需要修改的文件包括: 源程序 配置文件,例如 ssh 的配置文件 ~/.ssh/config 在没有图形界面的环境下,要编辑文件,vi 是最佳选择! 每一个要使用 Linux 的程序员,都应该或多或少的学

在MQL5程序中使用断言

简介 断言是一种特殊的结构,使程序能够在任何地方对任意的假设进行检查。它们通常以代码的形式被包含在程序中(大多数情况下作为独立的函数或者宏)。代码检查特定的表达式是否为真。如果为假,则显示一条相应的消息,如果有需要可使程序停止运行。如果表达式为真,这说明所有的操作都在计划中 — 假设被实现。否则,你可以肯定程序出现错误,并且有关于此次报错的清晰提示。 例如,如果预期特定的值X在任何情况下都不应该小于零,则可以做出下面的声明:“我确定X的值超过或者等于零”。如果X小于零,那么一个相关信息将会显示,程序员就

man tmpnam tmpnam_r

名称 tmpnam, tmpnam_r - 为临时文件创建名称 概要 #include &lt;stdio.h&gt; char *tmpnam(char *s); 说明 注意:应该避免使用tmpnam,请改用mkstemp或tmpfile。 tmpnam返回一个指向字符串的指针,该字符串是一个有效的文件名,并且在某个 时间点不存在同名的文件,因此天真的程序员可能认为临时文件适合使...

JS代码中如何使用局部变量和全局变量

JS开发人员在编写代码时可能犯的最大错误之一就是声明不必要的全局变量。全局变量对程序员非常有帮助,但如果不谨慎使用它们,它们会影响任何浏览器的速度和效率。 简短说明全局变量和局部变量 JS中主要使用两种类型的变量:局部变量和全局变量。局部变量是在函数中定义和使用的,而全局变量是为函数窗口定义的。简而言之,在代码没有终止之前,全局变量将一直存在。 对浏览器的影响 存储弱数据的变量并不太重要,但是,如果您在其上存储大量数据,那么它将阻塞您的带宽,并肯定会威胁到页面的效率。太多的数据存储在缓存中会降低浏览

SAPIEN_PrimalScript_2015_v7.1.73x86.rar

解压密码:123 安装说明:https://blog.csdn.net/hongfu951/article/details/118517942 PrimalScript是新一代的全局脚本环境。作为一个系统、数据库或网络管理员、web开发人员或最终程序员,你必须同时使用几种技术、语言和文件格式。诸如PrimalScript之类的Ribbon用户界面已经更新,可以在主屏幕上实际显示您每天使用的所有功能。您可以根据自己的需要创建自己的脚本模板,加快业务的交付速度。 Packager Script提供高级平台选项,以提供针对特定环境的解决方案。您可以限制域、机器、用户、平台和MAC地址包,以防止未经授权的脚本执行。MSI Database Builder以及执行部署命令的功能使您能够快速修改解决方案、打包解决方案、创建安装程序并将其安装到网络上。

MAMP_and_MAMP_PRO_4.2.0.23979.rar

解压密码:123 安装说明:https://blog.csdn.net/hongfu951/article/details/118517942 MAMP & MAMP PRO 2020绝对是一个惊人的应用程序,使您能够快速和毫不费力地安装在您的任何类型的Windows计算机上的本地服务器环境。 这个强大的程序集成了Apache, PHP和MSQL应用程序,为开发人员提供了开发,检查和应对网络应用程序或网页的所有基本工具。 这个应用程序是为专业的web开发人员和程序员设计的,易于安装和管理的开发环境。 它有一个非常简单和用户友好的界面,其中显示Apache和MySQL服务器的状态,以及访问本地主机和停止服务器的选项。 同时,它还可以让新用户的网络服务器立即启动并运行

运维招聘中经常遇到的名词-解释

Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库 持续集成,持续交付(CI/CD) ...

man feature_test_macros

名称 feature_test_macros - 功能测试宏 概要 #include &lt;features.h&gt; 说明 功能测试宏允许程序员编译程序时控制由系统头文件暴露的定义。 注意:要想有效控制,必须在包含任何头文件之前定义功能测试宏。这可以在编译 命令(cc -DMACRO=value)中完成,也可以通过在源代码中定义宏来完成,这些宏 在包含头文件之前被定义。 ...

今日话题:程序员,从培训班出来的都是垃圾,42岁程序员面试

其它行业好像也都有培训,大家都没觉得培训过有什么,反而觉得是上进的一种表现。 比如你培训过英语没有人鄙视,你培训过会计没有人鄙视,你培训过蓝翔挖掘机也没有人鄙视。 但是如果你培训过编程了,就有人说你不行。 其实程序员培训并没有什么特殊的,他只是选择了一个学习的途径而已,有的人从学校学习、有的人从网络上学习,而有的人只不过是从培训机构学习而已。 要知道,这个世界上优秀的人永远是极少数,大厂的程序员永远是极少数,真正支撑这个社会不断向前发展的,永远是那些低调务实的普通人。 一味的抹杀是一件很可怕的事情! 三、

typora-setup-x64.zip

typora文本排版工具,具有比word更加方便效率的文本编辑排版功能,程序员必备排版工具

ExcellentBlog_Guide

文章目录App后端设计开发总结网站备案项目管理接口文档管理平台DB杂谈学习执行力组建团队创业公司产品失败PMP App后端设计开发总结 App后端设计开发总结 网站备案 2018年之后的阿里云备案以及公安备案流程最佳实践 项目管理 定义开放性问题 接口文档管理平台 目前几种常见的线上接口文档管理平台的比较 DB 两难的境界:不定字段数目的数据库表设计和数据结构 杂谈 学习 程序员在工作期间如何对自己进行深造 ​ 执行力 如何找回自己的执行力 ​ 组建团队 从零开始组建团队开发一款APP的人力成本以及时间成本

上海行知道教育 Python 程序员笔试题.pdf_python面试

上海行知道教育 Python 程序员笔试题.pdf_python面试

Java学习_类与对象

总算来到了类与对象,来看看类与对象的总结吧 首先,要知道什么是类,属性,对象 类:是一种自定义的类型,是程序员自己定义的,就像int是系统定义好的整形一样,我们可以自定义自己所需要的类型 通过自定类型,可以表示一个具有同样特征的事物的集合 比如:cat类,表示的是所有的猫,所有的猫都有一些共同的属性 属性:每个物体或者对象能看到的或者不能看到的, 比如:猫的颜色,猫的年龄,猫的爱好 对象:则是指单个实例,在一群猫中,每只单独的猫就是一个单独的对象 创建类的说法: 1.创建一个实例化对象 2.实例化一个对象

git版本控制使用

Git-介绍及使用 Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 版本控制器 完成 协同开发 项目,帮助程序员整合代码 1. 帮助开发者合并开发的代码 2. 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突 软件:SVN 、 GIT(都是同一个人的个人项目) github、gitee(两个采用git版本控制器管理代码

7_Jsp 和 Servlet 的区别

可以将 JSP 当做一个可扩充的 HTML 来对待。 虽然在本质上 JSP 文件会被服务器自动翻译为相应的 Servlet 来执行。 Servlet 是面向 Java 程序员的 JSP 是面向 HTML 程序员的 除此之外两者功能完全等价。 可以将 JSP 当做一个可扩充的 HTML 来对待。 虽然在本质上 JSP 文件会被服务器自动翻译为相应的 Servlet 来执行。 Servlet 是面向 Java 程序员 JSP 是面向 HTML 程序员的, 除此之外两者功能完全等价。 ...

python函数和变量前的_下划线_

这两个链接比我写的不知道要高到哪里去: https://zhuanlan.zhihu.com/p/36173202 https://dbader.org/blog/meaning-of-underscores-in-python 1. 变量篇 1)前带一个下划线 _a 变量前带一个下划线,_a 说明该变量为私有变量,提示程序员不要通过外部类去访问它(由于python中并没有私有变量的说法,实际上外部类可以访问到该成员,因此下划线用来提示程序员) 2)两个下划线 __a_...

程序员面试金典 - 面试题 08.12. 八皇后

题目难度: 困难 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。 注意:本题相对原题做了扩展 示例: 输入:4 输出:[[".Q…","…Q",“Q…”,"…Q."],["…Q.",“Q…”,"…Q",".Q…"]] .

mysql中的批量更新

对于mysql中的批量更新,站在java程序员的角度而言,可以使用分条更新、或者用case when 这样的方式。 我就是使用的case when这样的方式。但是被提了一个bug,大体意思是这样 update a set tag= case tag when 1 then 11 end where bId=12 嗯,有问题。 问题在于,bId是个逻辑外键,所以根据bId会查询出很多数据,比如查询出tag可以是[1,2,3]这个集合,但是2,3并不在上面的when情况中。这时候数据库就会将tag字.

PHP程序员的进化之路-惠新晨.pptx

PHP程序员的进化之路-惠新晨.pptx

Java-某公司程序员应聘试题.doc

Java-某公司程序员应聘试题

c++新手教程_01_环境配置

c++开发IDE (可以工程用的) 微软系列 Microsoft Visual Studio 比如 Microsoft Visual Studio 2019 jetbrains CLION java程序员熟悉的 Intellij idea 同款风格 Linux 环境下 kdevelop 选用IDE: Clion 笔者 也是 Java程序员,这里就选用 Clion了. windows下配置 Clion+VS2019+Cmake windows 下 c++编译器 可选项有 微软的vs G

中高级程序员必备技能-Nginx(2)

nginx目录结构 这里为了在linux中方便查看目录结构,推荐安装一个工具:yum install -y tree 安装后使用tree命令来查看nginx的目录结构: [[email protected] local]# tree /usr/local/nginx/ /usr/local/nginx/ ├── client_body_temp ├── conf │ ├── fastcgi.conf │ ├── fastcgi.conf.default │ ├── fastcgi_params │

随便推点

推荐文章

热门文章

相关标签