1. 程式人生 > >linux下openssl命令詳解

linux下openssl命令詳解

目錄:

1,openssl命令總覽

2,證書應用

3,RSA應用

4,SHA1 應用

5,base64應用

6,des3應用

1,OpenSSl命令總覽

語法格式:

openssl command [ command_opts ] [ command_args ]

常用command:

version    用於檢視版本資訊

enc        用於加解密

ciphers    列出加密套件

genrsa    用於生成私鑰

rsa        RSA金鑰管理(例如:從私鑰中提取公鑰)

req        生成證書籤名請求(CSR)

crl        證書吊銷列表(CRL)管理

ca         CA

管理(例如對證書進行簽名)

dgst      生成資訊摘要

rsautl    用於完成RSA簽名、驗證、加密和解密功能

passwd    生成雜湊密碼

rand      生成偽隨機數

speed      用於測試加解密速度

s_client  通用的SSL/TLS客戶端測試工具

X509       X.509證書管理

verify      X.509證書驗證

pkcs7       PKCS#7協議資料管理

2,證書應用

申請證書

SSL常用於身份驗證、資料加密等應用中,要使用SSL,我們密碼有自己的證書。數字證書一般要向專業的認證公司(VeriSign)申請,並且都是收費的,某些情況下,我們只是想使用加密的資料通訊,而不在乎認證,這時就可以自己製作一個證書,自己製作一個證書,有兩種方式,一種是

Self Signed,另一種是自己製作一個CA,然後由這個CA,來發布我們需要的證書。下面分別介紹這兩個方法。

生成Self Signed證書

生成一個key,你的私鑰,openssl會提示你輸入一個密碼,可以輸入,也可以不輸,

輸入的話,以後每次使用這個key的時候都要輸入密碼,安全起見,還是應該有一個密碼保護

#openssl genrsa -des3 -out selfsign.key 4096

#使用上面生成的key,生成一個certificate signing request (CSR)

#如果你的key有密碼保護,openssl首先會詢問你的密碼,然後詢問你一系列問題,

#其中Common Name(CN)是最重要的,它代表你的證書要代表的目標,如果你為網站申請的證書,就要添你的域名。

#openssl req -new -key selfsign.key -out selfsign.csr

#生成Self Signed證書selfsign.crt就是我們生成的證書了

#openssl x509 -req -days 365 -in selfsign.csr -signkey selfsign.key -out selfsign.crt

另外一個比較簡單的方法就是用下面的命令,一次生成key和證書

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

生成自己的CA (Certificate Authority)

CA是證書的釋出者,CA可以釋出其他人的證書,把CA的證書加入系統信任的根證書後,由CA釋出的證書也被系統所信任,所以,CAkey是必須小心保護的,一般都要加密保護,並且限制為root許可權讀寫。

生成CAkey

#openssl genrsa -des3 -out ca.key 4096

#生成CA的證書

#openssl req -new -x509 -days 365 -key ca.key -out ca.crt

#生成我們的keyCSR這兩步與上面Self Signed中是一樣的

#openssl genrsa -des3 -out myserver.key 4096

#openssl req -new -key myserver.key -out myserver.csr

#使用ca的證書和key,生成我們的證書

#這裡的set_serial指明瞭證書的序號,如果證書過期了(365天后)

#或者證書key洩漏了,需要重新發證的時候,就要加1

#openssl x509 -req -days 365 -in myserver.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt

檢視證書

#檢視KEY資訊

#openssl rsa -noout -text -in myserver.key

#檢視CSR資訊

#openssl req -noout -text -in myserver.csr

#檢視證書資訊

#openssl x509 -noout -text -in ca.crt

#驗證證書

#會提示self signed

#openssl verify selfsign.crt

#因為myserver.crt是幅ca.crt釋出的,所以會驗證成功

#openssl verify -CAfile ca.crt myserver.crt

去掉key的密碼保護

#有時候每次都要輸入密碼太繁瑣了,可以把Key的保護密碼去掉

#openssl rsa -in myserver.key -out server.key.insecure

不同格式證書的轉換

一般證書有三種格式:

PEM(.pem)前面命令生成的都是這種格式,

DER(.cer .der) Windows上常見

PKCS#12檔案(.pfx .p12) Mac上常見

# PEM轉換為DER

#openssl x509 -outform der -in myserver.crt -out myserver.der

# DER轉換為PEM

#openssl x509 -inform der -in myserver.cer -out myserver.pem

# PEM轉換為PKCS

#openssl pkcs12 -export -out myserver.pfx -inkey myserver.key -in myserver.crt -certfile ca.crt

# PKCS轉換為PEM

#openssl pkcs12 -in myserver.pfx -out myserver2.pem -nodes

測試證書

Openssl提供了簡單的clientserver工具,可以用來模擬SSL連線,做測試使用。

#連線到遠端伺服器

#openssl s_client -connect www.google.com.hk:443

#模擬的HTTPS服務,可以返回Openssl相關資訊

# -accept用來指定監聽的埠號

# -cert -key用來指定提供服務的key和證書

#openssl s_server -accept 443 -cert myserver.crt -key myserver.key -www

#可以將key和證書寫到同一個檔案中

#cat myserver.crt myserver.key > myserver.pem

#使用的時候只提供一個引數就可以了

#openssl s_server -accept 443 -cert myserver.pem -www

#可以將伺服器的證書儲存下來

#openssl s_client -connect www.google.com.hk:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > remoteserver.pem

#轉換成DER檔案,就可以在Windows下直接查看了

#openssl x509 -outform der -in remoteserver.pem -out remoteserver.cer

3,RSA應用

#產生1024RSA私匙,用3DES加密它,口令為trousers

#輸出到檔案rsaprivatekey.pem

# openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024

#從檔案rsaprivatekey.pem讀取私匙,用口令trousers解密,

#生成的公鑰匙輸出到檔案rsapublickey.pem

# openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem

#用公鑰匙rsapublickey.pem加密檔案plain.txt

#輸出到檔案cipher.txt

# openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt

#使用私鑰匙rsaprivatekey.pem解密密文cipher.txt

#輸出到檔案plain.txt

# openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt

#用私鑰匙rsaprivatekey.pem給檔案plain.txt簽名,

#輸出到檔案signature.bin

# openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin

#用公鑰匙rsapublickey.pem驗證簽名signature.bin

#輸出到檔案plain.txt

# openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain

#X.509證書檔案cert.pem中獲取公鑰匙,

#3DES加密mail.txt

#輸出到檔案mail.enc

# openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem

#X.509證書檔案cert.pem中獲取接收人的公鑰匙,

#用私鑰匙key.pem解密S/MIME訊息mail.enc

#結果輸出到檔案mail.txt

# openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt

# cert.pemX.509證書檔案,用私匙key,pemmail.txt簽名,

#證書被包含在S/MIME訊息中,輸出到檔案mail.sgn

# openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn

#驗證S/MIME訊息mail.sgn,輸出到檔案mail.txt

#簽名者的證書應該作為S/MIME訊息的一部分包含在mail.sgn

# openssl smime -verify -in mail.sgn -out mail.txt

4,訊息摘要演算法應用例子

#SHA1演算法計算檔案file.txt的哈西值,輸出到stdout

# openssl dgst -sha1 file.txt

#SHA1演算法計算檔案file.txt的哈西值,輸出到檔案digest.txt

# openssl sha1 -out digest.txt file.txt

#DSS1(SHA1)演算法為檔案file.txt簽名,輸出到檔案dsasign.bin

#簽名的private key必須為DSA演算法產生的,儲存在檔案dsakey.pem

# openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt

#dss1演算法驗證file.txt的數字簽名dsasign.bin

#驗證的private keyDSA演算法產生的檔案dsakey.pem

# openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt

#sha1演算法為檔案file.txt簽名,輸出到檔案rsasign.bin

#簽名的private keyRSA演算法產生的檔案rsaprivate.pem

# openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt

#sha1演算法驗證file.txt的數字簽名rsasign.bin

#驗證的public keyRSA演算法生成的rsapublic.pem

# openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt

5,base64應用

#對字元abc進行base64編碼

#echo abc | openssl base64

結果為:YWJjCg==

#對YWJjCg==解碼

#echo YWJjCg== | openssl base64 -d

結果為:abc

#對檔案t.txt進行base64編碼

#openssl base64 -in t.txt

結果為:aGVsbG8K

#對aGVsbG8K進行解碼

#echo aGVsbG8K | openssl base64 -d

結果為:abc

#對t.txt進行編碼並將結果輸出到t.base64檔案裡

#openssl base64 -in t.txt -out t.base64

#若編碼值存放在t.base64檔案裡,對其進行解碼

#openssl base64 -d -in t.base64

結果為abc

6,des3應用

# 對稱加密應用例子
# 用DES3演算法的CBC模式加密檔案plaintext.doc,
# 加密結果輸出到檔案ciphertext.bin
# openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin

# 用DES3演算法的OFB模式解密檔案ciphertext.bin,
# 提供的口令為trousers,輸出到檔案plaintext.doc
# 注意:因為模式不同,該命令不能對以上的檔案進行解密
# openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers

# 用Blowfish的CFB模式加密plaintext.doc,口令從環境變數PASSWORD中取
# 輸出到檔案ciphertext.bin
# openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD

相關推薦

linuxopenssl命令

目錄: 1,openssl命令總覽 2,證書應用 3,RSA應用 4,SHA1 應用 5,base64應用 6,des3應用 1,OpenSSl命令總覽 語法格式: openssl command [ command_opts ] [ command_args ] 常用co

linuxcat命令

forever ron localhost root sta testing 幫助 查看 一點 1、cat 顯示文件連接文件內容的工具; cat 是一個文本文件查看和連接工具。查看一個文件的內容,用cat比較簡單,就是cat 後面直接接文件名。 比如: de>[[

linuxvim命令

但是 左移 功能 命令 file lips 查找替換 括號匹配 所想 高級一些的編輯器,都會包含宏功能,vim當然不能缺少了,在vim中使用宏是非常方便的::qx 開始記錄宏,並將結果存入寄存器xq 退出記錄模式@x 播放記錄在x寄存器中的宏命令稍微

【轉載】Linuxchkconfig命令

name scrip 再次 http 缺省 重新 禁止 level pool chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的運行級信息。謹記chkconfig不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接。 使用語法:chkconfig [--

Linux route命令

linux route路由詳解為了讓設備能訪問另一個子網,需要在設備裏增加路由到子網絡,下面是一些資料。基本操作如下: 一般來說,都是為了能訪問別的子網才設置路由的,比如說,你的主機處於192.168.10.0/24,而你想訪問192.168.20.0/24網的主機,當然你知道一個網關IP,例如192.168

linux yum命令

本文轉自http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.html yum(全稱為 Yellow dog Updater, Modified) 是一個在Fedora和RedHat以及SUSE中的Shell前端軟體包管理器。基於R

Linux ln 命令

這是linux中一個非常重要命令,請大家一定要熟悉。它的功能是為某一個檔案或目錄在另外一個位置建立一個同步的連結,類似Windows下的超級連結。 連結檔案分為軟連結和硬連結。  軟連結:軟連結不佔用磁碟空間,原始檔刪除則軟連結失效。 硬連結:硬連結只能連結普通檔案

Linuxtar命令

tar命令用於建立、還原備份檔案,它可以加入、解開備份檔案內的檔案。 引數 帶有*號的為常用的引數 . -A 新增壓縮檔案到已存在的壓縮包 . -c 建立新的壓縮檔案* . -d 記錄檔案的差別 . -r 向壓縮檔案的末尾追加檔案 . -u 更新原壓縮包中的檔案,新增改變了的現有檔案到已

Linuxchkconfig命令

chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的執行級資訊。謹記chkconfig不是立即自動禁止或啟用一個服務,它只是簡單的改變了符號連線。 使用語法:chkconfig [--add][--del][--list][系統服務] 或 chkconfig [--level <等級代

Linuxps命令 Linuxps命令的詳細使用方法

command 不可 .html 用戶 動態 進程描述符 -- 發生 option Linux下ps命令詳解Linux上進程有5種狀態:1. 運行(正在運行或在運行隊列中等待)2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)3. 不可中斷(收到信號不喚

Linuxps命令

如果要檢視後臺執行的程式,那就比較複雜一點。因為在不同版本的Linux作業系統中,要顯示後臺程序其所採用的可選項是不同的。如在紅帽子 Linux作業系統中,其實採用引數的形式而不是可選項。即採用ps aux命令可以顯示出所有的應用程式(包括前臺與後臺的)。引數與可選項的差異主要在前面又沒有這個-符號。如果帶有

Linuxps命令???

linux上程序有5種狀態:  1. 執行(正在執行或在執行佇列中等待)  2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到訊號)  3. 不可中斷(收到訊號不喚醒和不可執行, 程序必須等待直到有中斷髮生)  4. 僵死(程序已終止, 但程序描述符存在, 直

Linuxchkconfig命令即新增服務以及兩種方式啟動關閉系統服務

chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的執行級資訊。謹記chkconfig不是立即自動禁止或啟用一個服務,它只是簡單的改變了符號連線。 一、chkconfig 的使用語法 1、chkconfig [--add][--del][--list][系統

Linuxawk命令

grep 或 egrep 或awk 過濾兩個或多個關鍵詞:  grep -E ‘123|abc’ filename // 找出檔案(filename)中包含123或者包含abc的行  egrep ‘123|abc’ filename //用egrep同樣可以實現  awk

linuxtop命令

1、top 先看一張linux下執行top命令後的圖:(注:如果想退出直接ctrl+c或者q即可) 下面我們來逐行分析一下: 第一行 12:17:13——當前系統時間 1 day ,1:42——系統已經運行了1天1小時42分鐘(這期間沒有重啟過) 2 users——當前有

Linuxhistory命令---轉載

Linux下History命令主要用於顯示歷史指令記錄內容, 下達歷史紀錄中的指令 。 >History命令語法: [[email protected]]# history [n] [[email protected]]# history [-

Linux/Unixtar命令

                tar命令是Linux/Unix系統下的打包壓縮工具,可以將多個檔案合併為一個檔案,打包後的檔案字尾為“.tar”。這裡首先需要明確兩個概念:打包和壓縮。打包是指將一大堆檔案或目錄合併成一個總的檔案;壓縮則是將一個大容量的檔案通過一些壓縮演算法(gzip、bzip2等命令)變成

Linux:at命令

計時 osi 執行 inux days pan 必須 man 一個 at命令 at命令為單一工作調度命令。at命令非常簡單,但是在指定時間上卻非常強大 語法 at [選項] time at > 執行的命令 ctrl+d 選項 -m :當指定的任務被

linux 之awk命令

數學函數 mat loop 多次 finished 數組結構 save pre 新的 awk是一種程序語言,對文檔資料的處理具有很強的功能。awk名稱是由它三個最初設計者的姓氏的第一個字母而命名的: Alfred V. Aho、Peter J. We i n b e rg

Linux入門及命令

linux入門、date、echo一、用戶登錄 root用戶 ① 一個特殊的管理賬戶; ②又叫超級管理員; ③對系統的損害有無限的能力; ④除非必要,否則不要用root登錄; 普通用戶 ①權限有限; ②造成系統損害