openssl經常使用用法

OpenSSL主要有三個組件構成:html

  • openssl: 多用途命令行工具
  • libcrypto: 加密算法庫
  • libssl: 加密模塊應用庫,實現了ssl及tls

openssl能夠實現: 對稱和非對稱加密,密鑰證書管理git

openssl 全部命令:算法

Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dh                
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
gendh             gendsa            genpkey           genrsa            
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req               
rsa               rsautl            s_client          s_server          
s_time            sess_id           smime             speed             
spkac             srp               ts                verify            
version           x509              

Message Digest commands (see the `dgst' command for more details)
md4               md5               rmd160            sha               
sha1              

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              rc2               
rc2-40-cbc        rc2-64-cbc        rc2-cbc           rc2-cfb           
rc2-ecb           rc2-ofb           rc4               rc4-40            
seed              seed-cbc          seed-cfb          seed-ecb          
seed-ofb

命令格式: openssl command [command_opts][command_args]shell

對稱加密(enc)

openssl enc  -Cipher -[e/d] [-a] [-salt] [-in filename] [-out filename]

-Cipher:加密算法 -e: 加密操做 -d: 解密操做 -a: 使用base64位編碼 -salt: 自動加入隨機數做爲文件內容加密,默認數據庫

加密ubuntu

openssl enc -des3 -e -a -in ./in -out ./out
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

解密centos

openssl enc -des3 -d -a -in ./out -out ./in1
enter des-ede3-cbc decryption password:

OpenSSL一共提供了8種對稱加密算法,其中7種是分組加密算法,僅有的一種流加密算法是RC4。這7種分組加密算法分別是AES、DES、Blowfish、CAST、IDEA、RC二、RC5,都支持電子密碼本模式(ECB)、加密分組連接模式(CBC)、加密反饋模式(CFB)和輸出反饋模式(OFB)四種經常使用的分組密碼加密模式。其中,AES使用的加密反饋模式(CFB)和輸出反饋模式(OFB)分組長度是128位,其它算法使用的則是64位。事實上,DES算法裏面不單單是經常使用的DES算法,還支持三個密鑰和兩個密鑰3DES算法。安全

信息摘要(dgst)

openssl dgst -Cipher inputfile [-out file]

獲取文件md5dom

openssl dgst -md5 ./in
MD5(./in)= 2b1761bf6d399bff4c60e69da7f02d81

OpenSSL實現了5種信息摘要算法,分別是MD二、MD五、MDC二、SHA(SHA1)和RIPEMD。SHA算法事實上包括了SHA和SHA1兩種信息摘要算法,此外,OpenSSL還實現了DSS標準中規定的兩種信息摘要算法DSS和DSS1。ide

生成密碼(passwd)

openssl passwd [options] [passwords]

where options are -crypt standard Unix password algorithm (default) -1 MD5-based password algorithm -apr1 MD5-based password algorithm, Apache variant -salt string use provided salt (隨機加鹽,鹽值同樣,獲得的密碼hash也同樣) -in file read passwords from file -stdin read passwords from stdin -noverify never verify when reading password from terminal -quiet no warnings -table format output as table -reverse switch table columns

openssl passwd -1 -in ./in
$1$2xV8Igpw$LD01hvcMb9ThVaX4KdPko0

passwd的主要做用是用來計算密碼hash的,目的是爲了防止密碼以明文的形式出現。

生成隨機數(rand)

Usage: rand [options] num
where options are
-out file             - write to file
-engine e             - use engine e, possibly a hardware device.
-rand file:file:... - seed PRNG from files
-base64               - base64 encode output
-hex                  - hex encode output
openssl rand  10
��eO]�.� �
openssl rand  -hex 10
d692dfc3564addf698c2

openssl rand 生成指定長度的隨機字符,若是不指定顯示編碼會看到不少亂碼,因此須要指定可視化編碼base64或hex

生成密鑰對(genrsa)

首先須要先使用 genrsa 標準命令生成私鑰,而後再使用 rsa 標準命令從私鑰中提取公鑰。

usage: genrsa [args] [numbits]
 -des            encrypt the generated key with DES in cbc mode
 -des3           encrypt the generated key with DES in ede cbc mode (168 bit key)
 -seed
                 encrypt PEM output with cbc seed
 -aes128, -aes192, -aes256
                 encrypt PEM output with cbc aes
 -camellia128, -camellia192, -camellia256
                 encrypt PEM output with cbc camellia
 -out file       output the key to 'file
 -passout arg    output file pass phrase source
 -f4             use F4 (0x10001) for the E value
 -3              use 3 for the E value
 -engine e       use engine e, possibly a hardware device.
 -rand file:file:...
                 load the file (or the files in the directory) into
                 the random number generator

使用genrsa生成私鑰

openssl genrsa -out ./private 1024
Generating RSA private key, 1024 bit long modulus
......++++++
.........++++++
e is 65537 (0x10001)

能夠經過指定加密算法-[des/des3]等對輸出的私鑰進行加密

openssl genrsa -out private1 -des 1024 Generating RSA private key, 1024 bit long modulus ...........................++++++ .........++++++ e is 65537 (0x10001) Enter pass phrase for private1: Verifying - Enter pass phrase for private1: openssl rsa -in private1 -out public1 -pubout Enter pass phrase for private1: writing RSA key

使用rsa提取公鑰

openssl rsa -in ./private -out public -pubout
writing RSA key

私鑰加密和公鑰解密(rsautl

公鑰加密

openssl rsautl -in ./data -out ./data_enc -inkey ./public -pubin -encrypt

私鑰解密

openssl rsautl -in ./data_enc -out ./data_dec -inkey ./private -decrypt

rsautl本指令可以使用RSA算法簽名,驗證身份,加密/解密數據。

私有CA

咱們的目的就是要獲取數字證書,數字證書內包含了擁有證書者的姓名、地址、電子郵件賬號、公鑰、證書有效期、發放證書的CA、CA的數字簽名等信息。證書主要有三大功能:加密、簽名、身份驗證。用戶能夠經過想CA中心申請也能夠自建私有的CA。不管那種咱們都須要先生成證書籤署請求

生成證書籤署請求

  1. 生成私鑰
openssl genrsa -out ./private.key 1024
  1. 生成證書籤署請求(Certificate Signing Request (CSR))
openssl req -new -key ./private.key -out ./request.csr
  1. 將生成證書請求發送給ca主機
  2. 在ca主機上籤署生成證書
openssl ca -in ./request.csr -out ./cer.crt -days 365
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jan  4 15:29:45 2017 GMT
            Not After : Jan  4 15:29:45 2018 GMT
        Subject:
            countryName               = zh
            stateOrProvinceName       = sc
            organizationName          = zj
            organizationalUnitName    = it
            commonName                = suntopo@163.com
            emailAddress              = suntopo@163.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                FA:0B:97:C5:89:47:45:95:92:65:A7:17:4E:D0:50:DD:E7:98:DC:1F
            X509v3 Authority Key Identifier: 
                keyid:56:12:F7:01:CA:F8:D8:EB:AB:80:3B:4A:B3:9C:1C:61:EE:24:4D:D7
Certificate is to be certified until Jan  4 15:29:45 2018 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
  1. 將生成的證書發送到目標主機上就可使用了

構建私有CA

  1. 爲建立CA提供所需的目錄及文件

ubuntu下openssl目錄在/usr/lib/ssl(軟連的/etc/ssl),centos默認在/etc/pki/,默認已經存在了openssl.cnf文件,須要建立目錄,因爲文件中使用的dir=./demoCA,須要修改爲絕對目錄

mkdir -pv /usr/lib/ssl/demoCA/{certs,crl,newcerts,private}
touch /usr/lib/demoCA/{serial,index,index.txt}
  1. 指明證書開始編號
echo 01 >> serial
  1. 生成私鑰(注意目錄和名字須要和配置文件中一致)
openssl genrsa -out /usr/lib/ssl/demoCA/private/cakey.pem 1024
  1. 生成自簽名證書
openssl req -new -x509 -in /usr/lib/ssl/demoCA/private/cakey.pem -out /usr/lib/ssl/demoCA/cacert.pem -days 3650

-new:表示生成一個新證書籤署請求

-x509:專用於CA生成自簽證書,若是不是自簽證書則不須要此項

-key:生成請求時用到的私鑰文件

-out:證書的保存路徑

-days:證書的有效期限,單位是day(天),默認是365天

密鑰和證書管理是PKI的一個重要組成部分,OpenSSL爲之提供了豐富的功能,支持多種標準。 首先,OpenSSL實現了ASN.1的證書和密鑰相關標準,提供了對證書、公鑰、私鑰、證書請求以及CRL等數據對象的DER、PEM和BASE64的編解碼功能。OpenSSL提供了產生各類公開密鑰對和對稱密鑰的方法、函數和應用程序,同時提供了對公鑰和私鑰的DER編解碼功能。並實現了私鑰的PKCS#12和PKCS#8的編解碼功能。OpenSSL在標準中提供了對私鑰的加密保護功能,使得密鑰能夠安全地進行存儲和分發。 在此基礎上,OpenSSL實現了對證書的X.509標準編解碼、PKCS#12格式的編解碼以及PKCS#7的編解碼功能。並提供了一種文本數據庫,支持證書的管理功能,包括證書密鑰產生、請求產生、證書籤發、吊銷和驗證等功能。 事實上,OpenSSL提供的CA應用程序就是一個小型的證書管理中心(CA),實現了證書籤發的整個流程和證書管理的大部分機制。

troubles && errors

  1. wrong number of fields on line 1 (looking for field 6, got 1, '' left)

在建立私有CA的第二步中,在serial寫入了01,清空serial就能夠了

  1. CA certificate and CA private key do not match

在經過req -new -x509建立自簽名證書的時候,提示用戶輸入密碼,而後使用ca簽署的時候報上面的錯誤,下面是openssl.cnf關於req配置

[ req ]
default_bits		= 2048
default_md		= sha1
default_keyfile 	= privkey.pem
distinguished_name	= req_distinguished_name
attributes		= req_attributes
x509_extensions	= v3_ca	# The extentions to add to the self signed cert

對自簽名文件使用sha1加密,可是按理說應該沒問題,可是報錯了,索性把這一行註釋了,而後就OK了

相關文章
相關標籤/搜索