OpenSSL主要有三個組件構成:html
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
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算法。安全
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
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的,目的是爲了防止密碼以明文的形式出現。
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 標準命令生成私鑰,而後再使用 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。不管那種咱們都須要先生成證書籤署請求。
生成證書籤署請求
openssl genrsa -out ./private.key 1024
openssl req -new -key ./private.key -out ./request.csr
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
構建私有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}
echo 01 >> serial
openssl genrsa -out /usr/lib/ssl/demoCA/private/cakey.pem 1024
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),實現了證書籤發的整個流程和證書管理的大部分機制。
在建立私有CA的第二步中,在serial寫入了01,清空serial就能夠了
在經過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了