密碼學專題 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.pswp.cn/news/446176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446176.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446176.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java pakage、import關鍵字

package介紹 常用的包 import 案例

python數組初始化_Python Numpy 數組的初始化和基本操作

Python 是一種高級的,動態的,多泛型的編程語言。Python代碼很多時候看起來就像是偽代碼一樣,因此你可以使用很少的幾行可讀性很高的代碼來實現一個非常強大的想法。 一.基礎: Numpy的主要數據類型是ndarray,即多維數組…

密碼學專題 OpenSSL中SSL相關指令

再談SSL和OpenSSL 由于SSL協議已經是密碼學和PKI技術中非常具體的一個應用協議,為了實現它,OpenSSL在密碼學基礎應用和PKI技術的基礎實現上做了大量的工作,才逐漸形成和奠定了OpenSSL在密碼學應用和PKI技術開發中的重要基礎軟件包地位。Open…

python企業發放的獎金_你公司的年終獎發了嗎?

沒發, 被裁了. 跨境電商行業, 2017.7 入職,2018.11.19 下午接到裁員通知.. 人事找我聊了下,叫我一個星期之內走,補償1個月工資.... 我想想有點不對勁.. 于是我百度了下,5分鐘之后,提出了我的方案: 1、按照勞動法應該補償1.5個月,并且提前1月通知 2、補償2.5個月. 我立馬走. 最后…

使用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…

關于python語言的編程模式、哪個說法正確_測驗1: Python基本語法元素 (第1周) 單選題+程序題...

第1章測驗,共10道單選題和2道編程題,限答1次 單選題 1.Guido van Rossum正式對外發布Python版本的年份是: A.2002 B.1998 C.2008 D.1991 正確答案: D Python成功了,所以早年的開發歷史也受到關注,以下是Gui…

火狐瀏覽器添加MetaMask錢包和本地開啟私有鏈開發

火狐瀏覽器添加MetaMask錢包 因為對其配置了代理工具,所以直接使用谷歌引擎搜索MetaMask錢包即可第一次使用,立即開始設置 點擊我同意,進行密碼的創建 牢記助記詞,助記詞及其關鍵,將其存儲在安全的地方 區塊鏈-開發 M…

python賦值01_python學習筆記1-賦值與字符串 | 學步園

閱讀本學習筆記需有一定語言基礎,閑話少說,我們開始 一、賦值與數字 【簡介】 python的賦值很簡單: number 1 # 數值 number 2 2 # 支持加減乘除運算 number (1 2j) * (1 - 1j) # 支持復數的運算 二、字符串 【簡介】 str "Hello,…

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…