密码学专题 OpenSSL标准转换指令

概述

  • 繁多复杂的各种文件编码格式、证书格式和密钥格式等。事实上,并非OpenSSL开发者想要将数字世界弄得如此令人头疼,只是由于各种原因,数字世界存在各种不同的标准,为了尽量兼容这些不同的标准,OpenSSL开发者才相应地在其指令和代码中支持如此多的格式。
  • 日常使用会面临处理这些不同标准之间相互兼容和转换的问题,比如将X.509证书转换成PKCS#12格式证书就是常见的任务。事实上,在OpenSSL的很多指令中提供了不同格式和标准之间的转换功能
  • 本章将集中介绍pkcs8和nseq指令的使用及其相关的标准

PKCS#8标准简介

  • 相对于其他标准,PKCS#8标准算是一个非常简单的标准了,它主要用于封装私钥和其他相关的属性信息。一般来说,PKCS#8格式的私钥都是被加密的,支持PKCS#5和PKCS#12标准定义的算法,当然,私钥也可以不加密。
  • PKCS#8标准一方面可以增强私钥的安全性,另一方面也为用户提供了一种简单的确立信任关系的方式,这主要是基于私钥特别名称和最高层可信者的权威公钥等属性信息。

pkcs8指令介绍

功能概述和指令格式

  • OpenSSL提供了pkcs8指令来执行PKCS#8标准相关的工作。它可以把私钥转化为PKCS#8的格式,也可以把PKCS#8格式的私钥转换成其他存储标准的格式。OpenSSL的pkcs8指令对加密和非加密格式的私钥都能进行处理,其支持的加密算法有PKCS#5(版本1.5和2.0)和PKCS#12两种标准的定义。OpenSSL提供的经过PEM编码的PKCS#8标准的文件,分为加密和非加密两种方式。

PKCS#8文件生成选项topk8

  • 默认情况下,pkcs8指令会要求输入一个PKCS#8格式的密钥,并将其进行处理后转换成普通格式的密钥输出并存储,这种情况一般用于处理或者显示一个已经存在的PKCS#8密钥的内容。如果使用了topk8选项,则pkcs8指令会将输入的一个普通格式的密钥转换成PKCS#8标准封装的密钥并输出。

输入输出选项in,out,inform和outform

  • in选项指定了输入密钥的文件名,默认情况下使用标准输入。如果输入的密钥是经过加密的,那么在读取密钥信息的过程中会提示输入加密口令。当然,如果你已经使用passin选项提供了加密口令,该提示信息就不会再出现。
  • out选项指定了存储输出密钥信息的文件名,默认情况下是标准输出。如果选择了加密选项而又没有使用pasout选项指定加密口令时,在输出密钥时会提示输入加密口令。输出文件与输入文件在同一个文件夹下时不可以重名,否则生成的文件会在没有读原密钥文件之前覆盖原文件,出现读密钥错误。
  • inform和outform选项分别指定了输入和输出文件的编码格式,支持的格式包括PEM和DER两种。 

加密口令输入选项passin和passout

  • 由于私钥的重要性,所以一般都使用了加密保护,加密保护使用的密钥和初始向量是从用户提供的口令中提取出来的,所以在使用密钥的时候也需要提供相同的口令进行密钥的解密。
  • passin和passout选项分别指定了输入和输出密钥时进行加解密的口令源。
  • 如果输入的密钥文件需要口令进行解密而却没有使用pasin选项提供口令,那么程序会在指令行提示用户输入解密口令。

私钥格式选项nocrypt,nooct,embed和nsdb

  • 使用pkcs8指令时,通常情况下输入或是产生的PKCS#8格式的密钥都是使用口令基于某种算法加密的私钥信息结构。
  • 如果使用nocrypt选项,则告诉指令其输入和产生的私钥都将是不经加密的私钥信息结构。私钥不进行加密,显然安全性会大大降低,所以除非万不得已,一般不推荐使用此选项。
  • nooct选项用于产生一种非标准格式的RSA私钥,以兼容一些软件。RSA私钥一般明确要求被封装到一个OCTETSTRING字符串内。但是有些软件只能识别私钥自身,对附加的OCTETSTRING字符串不能识别。在这种情况下,就可以使用nooct选项去掉OCTETSTRING字符串。
  • embed选项用于产生一种非标准格式的DSA密钥。在这种格式中,DSA参数内嵌到PrivateKey结构中。
  • nsdb选项则用于产生一种兼容Netscape私钥数据库格式的DSA密钥。

密钥加密算法选项v2和v1

  • v1选项用于选择PKCS#5v20中的所有算法。一般情况下,PKCS#8结构的私钥是使用pbeWithMD5AndDES-CBC这种口令加密算法加密的。虽然这种算法只使用了56bit的DES加密,但已经是PKCS#5v1.5中加密强度最高的算法。
  • 使用v2选项则可以选择PKCS#5v2.0中更高强度的算法,这些算法有168bit的3DES或者128bit的RC2等。目前的软件支持PKCS#5v2.0的不多,但是如果你使用的范围都局限于OpenSSL,那么就一点问题都没有。
  • v2选项有效的参数包括des,des3和rc2,OpenSSL推荐读者使用DES3这种加密算法。v1选项用于选择PKCS#5v1.5或者PKCS#12中定义的算法,事实上,也包含了部分PKCS#5v2.0中定义的算法。
  • 表11-1列出了v1选项可以使用的参数及其含义。

engine选项

  • 如果engine选项指定了有效的Engine设备,那么指令中任何该Engine设备支持的上述操作都会使用Engine设备的操作流程而不再使用OpenSSL算法库本身提供的函数。
  • 对于pkcs8指令来说,可以使用engine设备的操作主要包括RSA或者DSA密钥产生和对私钥进行加解密的算法。 

例子

 Netscape证书标准

  • 为了方便下载一系列的证书,尤其对于为了验证要下载一个证书链的情况,Netscape提供了一种名为Netscape证书序列(Netscape  Certificate  Sequence)的格式来封装一系列证书(事实上,里面采用了一个PKCS#7格式来封装证书),以便能够一次性地下载或者传输多个数字证书。
  • 所以,某些时候,Netscape证书序列可以替代PKCS#7的作用,用来打包一系列证书。Netscape证书序列虽然不一定能够得到微软的支持,但是在其他一些开源软件和Linux软件中却得到了广泛的支持,我们也因此随时会面临要把普通的一些证书封装成Netscape证书序列的要求和任务。
  • OpenSSL显然也考虑到了这些可能出现的问题,于是提供了本节要介绍的nseq指令。

功能概述和指令格式

  • nseq指令的任务简单而明确:将普通X.509证书封装成Netscape证书序列,或者将Netscape证书序列转换成普通的X.509证书。
  • 这个指令的格式简单,也容易掌握,其格式为:

输入和输出文件选项in和out

  • in和out选项分别指定了输入和输出的文件名,默认是标准的输入和输出设备。

转化格式选项toseq

  • 使用toseq选项告诉指令执行将一个或者多个普通X.509证书转换成一个Netscape证书序列的操作。如果不使用该选项,即默认情况下,输入的应该是一个Netscape证书序列文件,而输出的是一个或者多个普通X.509证书,当然,它们都存储在一个输出文件中。 

例子 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java pakage、import关键字

package介绍 常用的包 import 案例

密码学专题 OpenSSL中SSL相关指令

再谈SSL和OpenSSL 由于SSL协议已经是密码学和PKI技术中非常具体的一个应用协议,为了实现它,OpenSSL在密码学基础应用和PKI技术的基础实现上做了大量的工作,才逐渐形成和奠定了OpenSSL在密码学应用和PKI技术开发中的重要基础软件包地位。Open…

使用MetaMask实现转账交易时附带Input Data数据

进入如下页面,点击View Assert in Explorer进入Etherscan网站,就可以看到本账户先前所有的交易信息。 字段分析 Txn Hash 是交易的HashMethod:交易的类型,一般是两种,如果是Transfer指定的是合约部署;如…

Ubuntu安装Google浏览器

下载谷歌浏览器 直接使用Ubuntu自带的火狐浏览器进行下载 默认下载到/tmp临时文件夹里面,考虑到权限问题,需要将其移动到 Downloads文件夹下面使用命令 sudo mv ./goo(Tab)~/Down(Tab)使用命令行的方式进行下载 wget https://dl.g…

普通类创建获取session 方式_猿蜕变11——一文搞懂mybatis花式使用方式

看过之前的蜕变系列文章,相信你对mybatis有了初步的认识。但是这些还不够,我们今天进一步来了解下mybatis的一些用法。猿蜕变同样是一个原创系列文章,帮助你从一个普通的小白,开始掌握一些行业内通用的框架技术知识以及锻炼你对系…

Ubuntu配置IPFS的环境

参考链接 Ubuntu上IPFS环境搭建 - 简书 下载安装包 下载地址:https://dist.ipfs.io/#go-ipfs页面会自动根据你的操作系统提供适合的下载安装包,所以需要在Ubuntu环境下点开上面那个链接,网页自动识别当前的平台并提供对应的版本&#xff0c…

composer升级_Composer-命令简介

简介Composer 是一个用于 PHP 依赖管理的工具。它实现了让你声明项目所依赖的库,并帮你完成安装/更新过程。以下命令来自 composer version 1.8.0。翻译使用【百度翻译】。通过在命令窗口执行:composer或者:composer list得到 composer 的全部…

Ubuntu搭建联盟链,实现节点之间数据同步

安装go环境 从参考链接选择Linux版本的go的安装包 使用命令 mv go(Tab补全)/usr/local 移动go安装包到/usr/local目录下使用命令解压 sudo tar -xvzf go(Tab补全) 配置环境 sudo gedit ~/.profile export PATH$PATH:/usr/local/go/bin激活生效 sou…

火狐浏览器添加MetaMask钱包和本地开启私有链开发

火狐浏览器添加MetaMask钱包 因为对其配置了代理工具,所以直接使用谷歌引擎搜索MetaMask钱包即可第一次使用,立即开始设置 点击我同意,进行密码的创建 牢记助记词,助记词及其关键,将其存储在安全的地方 区块链-开发 M…

CLion导入用户自己的lib和头文件

文件的层级结构如上面所示对应的CMakeLists.txt配置文件如下面所示 cmake_minimum_required(VERSION 3.15) project(smart_shap)set(CMAKE_CXX_STANDARD 14)add_executable(${PROJECT_NAME} main.cpp )#target_link_directories(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCE_DIR}…

东芝移动硬盘驱动_传输数据不用等,高速移动硬盘数据线畅享快传体验

不管你是设计师,摄影师亦或是办公一族,几乎都能用到电脑,而电脑里的文件如果很多的话,为了安全起见都会备份一份数据,以免电脑储存容量过大导致电脑卡顿。另一方面,为了保护数据防止丢失造成不必要的麻烦&a…

使用国密浏览器和使用Wireshark进行国密抓包

使用的软件 信密浏览器 密信浏览器发布Windows正式版 - 密信技术国密Wireshark GMSSL - 国密SSL实验室支持国密算法的网站 https://www.wotrus.com/ 流程操作 打开windows终端,使用命令ping沃通网站,找到这个网站的ip地址 ping www.wotrus.com打…

django框架学习文档_Python四大主流网络编程框架,你知道么?

高并发处理框架—— TornadoTornado 是使用 Python 编写的一个强大的可扩展的 Web 服务器。它在处理高网络流量时表现得足够强健,却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。Tornado 作为 FriendFeed 网站的基础框架&#xff0c…

VS Studio报错无法解析的外部符号 _imp_XXXXXXXXX

出现字符_imp,说明不是真正的静态库,而是某个动态库的导入库,导入函数和自己不同名,所以加了字符_imp。比如说_imp_GetUserNameA就是GetUserNameA函数。会报这种错误的原因: 1、说明注册表函数没有相关的lib库&#xf…

hashmap put过程_阿里十年技术大咖,教你如何分析1.7中HashMap死循环

在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry…

Socket代码实现服务端 和 客户端之间通信

服务端代码 // Socket_connection.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #ifndef UNICODE #define UNICODE #endif#define WIN32_LEAN_AND_MEAN#include <winsock2.h> #include <Ws2tcpip.h> #include <stdio.h> #incl…

python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)

# 1. 目标 这里我们通过简单案例的综合应用&#xff0c;了解框架的概念&#xff0c;感受循环、字符字典数据处理等基础点的应用场景 # 2. 框架 搭建一个人员信息管理系统的简单框架&#xff0c;初步感受框架的概念。 1> 主程序 -- cards_mian.py程序的主功能代码&…

本地搭建server和客户端使用端口进行数据通信,使用Wireshark抓取127.0.0.1环回地址并分析通信数据

本地搭建服务端和客户端 参考网址 Socket代码实现服务端 和 客户端之间通信_CHYabc123456hh的博客-CSDN博客server指定通信的端口是 5099client 使用的端口是动态变化的&#xff0c;因此在wireshark里面需要设定的抓取端口是 5099 使用wireshark开启抓包 参考链接 [tcp] Wir…

double operator[](int i)_java中double类型精度丢失问题及解决方法

原文链接&#xff1a;https://blog.csdn.net/yacolspace/article/details/78287394double类型数据加减操作精度丢失问题今天在项目中用到double类型数据加减运算时&#xff0c;遇到了一个奇怪的问题&#xff0c;比如120.2300.03&#xff0c;理论上结果应该是321.23&#xff0c;…

验证客户端和服务端可以传输经SM4加密的密文数据,从而验证发送数据已使用服务器密码机进行SM4加密,而不是随便的字符串乱码

前提操作 搭建客户端和服务端 Socket代码实现服务端 和 客户端之间通信_CHYabc123456hh的博客-CSDN博客使用wireshark进行数据的监听和测试https://blog.csdn.net/CHYabc123456hh/article/details/121929288 结论验证 使用在线SM4加密&#xff0c;输入明文 和 选择模式,生成…