概述

  • 繁多复杂的各种文件编码格式、证书格式和密钥格式等。事实上,并非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证书,当然,它们都存储在一个输出文件中。

例子

密码学专题 OpenSSL标准转换指令相关推荐

  1. 密码学专题 OpenSSL专题

    OpenSSL总体架构 软件包分为三个主要的功能部分:密码算法库 . SSL协议库及应用程序 MacOS,MS,OS/2及 VMS这几个目录,包含了在不同的 平台编译时的环境变量配置文件,在安装编译完 ...

  2. 密码学专题 证书和CA指令 证书和CA功能概述

    为什么需要证书 实现了公钥和私钥的相互验证,但是任何人都可以生成很多的密钥对,密钥对并没有关联实体身份,因此诞生可数字证书 前提是CA是所有用户都信任的 用户需要将自己的信息和公钥交给CA进行认证生成 ...

  3. 密码学专题 证书和CA指令 申请证书|建立CA|CA操作|使用证书|验证证书

    Req指令介绍 功能概述和指令格式 req指令一般来说应该是提供给证书申请用户的工具,用来生成证书请求以便交给CA验证和签发证书.但是,OpenSSL的req指令的功能远比这样的要求强大得多,它不仅可 ...

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

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

  5. 密码学专题 openssl编译和安装

    Configure 脚本文件 使得OpenSSL可以适应多种不同的系统平台和多达几十种不同的编译器.Configure指令还可以使OpenSSL在编译的时候具备组件的选择功能,比如可以选择支持或者不支 ...

  6. 密码学专题 非对称加密算法指令概述 RSA

    非对称加密算法也称为公开密钥算法,其解决了对称加密算法密钥需要预分配的难题,使得现代密码学的研究和应用取得了重大发展. 非对称加密算法的基本特点如下: 加密密钥和解密密钥不相同; 密钥对中的一个密钥可 ...

  7. Vue自定义指令-实时时间转换指令 v-time开发

    目录 前言 1. 新建html.index.js文件 2. 时间转换逻辑 3. 新建 time.js 文件 4 总结 前言 为了显示出 实时性 ,在一些社交类产品中,比如WX朋友圈或微博等地方,作者发 ...

  8. 字符转换指令tr,col,expand

    tr -[dsx] seting ... 使用tr替换字符: 1 2 3 4 5 6 7 8 9 10 11 12 [whx@localhost ~]$ last | head -n 5 | tr'[ ...

  9. ds18b20温度转换指令_DS18B20温度传感器(附代码并浅谈与或运算)

    DS18B20使用的是一种比较特殊的传输协议,仅需一个接线口就能实现通信 前言 DS18B20独特的单线接口仅需一个端口引脚进行通讯,这让每一个学习到这里的人都感到很神奇.在这篇文章中我们将通过学习1 ...

最新文章

  1. [原]对Linux环境下任务调度一点认识
  2. 《LeetCode力扣练习》第14题 C语言版 (做出来就行,别问我效率。。。。)
  3. oracle怎么导出筛选后的数据,ORACLE,筛选单字段不重复的记录,保留其他字段....
  4. b+树阶怎么确定_你知道危险品运输是怎么包装的吗?
  5. linux bin目录误删,Linux下误删 /user/bin目录后的补救
  6. 重磅消息,Redis开源作者宣布不再维护Redis项目!
  7. docker中启动Springboot时异常之Failed to instantiate [com.zaxxer.hikari.HikariDataSource]
  8. iOS 超好用的本地视频播放器推荐!
  9. python飞机大战类_python飞机大战
  10. Word文档中去除EndNote格式
  11. tomcatX.exe与startup.bat启动的区别
  12. [PTA]7-24 约分最简分式
  13. 支付宝集福攻略,作为程序员的你集福了么?
  14. 常见文件类型的图标介绍
  15. 关于Java程序员技能和面试注意事项
  16. 美团后台开发笔试-数字字符
  17. 关于解决MYSQL的like模糊查询效率的一种方案
  18. 冰封王座 英雄被动技能评估
  19. 584分学计算机报什么大学,高考成绩584分可以上哪些大学,2021年584分怎么填报志愿上什么大学...
  20. 用计算机设计软件,平面设计中计算机设计软件的作用

热门文章

  1. android 解析错误 真机,AndroidStudio使用真机调试时出的一些bug
  2. rabbitmq 消费端代码获取队列名称_C#调用RabbitMQ实现消息队列的示例代码
  3. python中什么是按位取反_Python学习中的“按位取反”笔记总结
  4. 【转】ubuntu 下 VNCview 远程桌面无法传输文件问题
  5. JSP的三六九四七(三大指令、六大标签、九大内置对象、四大作用域、七个动作指令)
  6. Linux:tomcat安装/版本升级
  7. Spark(idea)操作mysql进行查询和插入 (代码+理解)
  8. 【Python 标准库学习】容器数据类型库 — collections
  9. C++ 异常,标准异常类,自定义异常类,throw,try,catch语句
  10. 【ZOJ - 1163】The Staircases(dp)