1. 程式人生 > >linux安全和加密篇(三)—openssl工具和CA證書

linux安全和加密篇(三)—openssl工具和CA證書

OpenSSL:開源專案

三個元件:

  • openssl: 多用途的命令列工具,包openssl
  • libcrypto: 加密演算法庫,包openssl-libs
[[email protected] data]# openssl-libs
  • libssl:加密模組應用庫,實現了ssl及tls,包nss
[[email protected] data]# rpm -ql nss

openssl命令:

  • 兩種執行模式:互動模式和批處理模式
  • openssl version:程式版本號
  • 標準命令、訊息摘要命令、加密命令
  • 標準命令:
  • enc, ca, req, ...
[[email protected]
data]# rpm -ql openssl /etc/pki/CA /etc/pki/CA/certs /etc/pki/CA/crl /etc/pki/CA/newcerts /etc/pki/CA/private usr/bin/openssl

 openssl 命令支援對稱加密,非對稱加密解密等

用法:1、互動式

[[email protected]>08:52:30~]#openssl
OpenSSL> ?

openssl:Error: '?' is an invalid command.

2、非互動式

openssl + 命令 命令.....

openssl命令

對稱加密:

  • 工具: openssl enc, gpg
  • 演算法: 3des, aes, blowfish, twofish

enc命令:

  • 幫助: man enc
  • 加密:
  • openssl enc -e -des3 -a -salt -in testfile
  • -out testfile.cipher

解密:

  • openssl enc -d -des3 -a -salt –in testfile.cipher
  • -out testfile
  • openssl ?

加密例子:

第一步:

[[email protected]>14:47:26/app]#openssl enc -e -des3 -a -salt -in fstab -out fstab.cip
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:

第二步:

[[email protected] data]# base64 -d test.cip

######使用base64 -d fstab.cip 編碼轉換成二進位制####

第三步:

解密

[[email protected] data]# openssl enc -d -des3 -a -salt -in test.cip -out test2

enter des-ede3-cbc decryption password:

openssl命令—雜湊演算法

單向加密:

  • 工具: md5sum, sha1sum, sha224sum,sha256sum…
  • openssl dgst

dgst命令:

  • 幫助: man dgst
  • openssl dgst -md5 [-hex預設] /PATH/SOMEFILE
  • openssl dgst -md5 testfile
  • md5sum /PATH/TO/SOMEFILE

例子:

md5sum test

[[email protected] data]# md5sum test
cf4676656ace92c1d8e1edf2f2ecbf6a  test
[[email protected] data]# openssl dgst -md5 test
MD5(test)= cf4676656ace92c1d8e1edf2f2ecbf6a

因為演算法一樣,所以得出的雜湊值也相同

openssl命令

生成使用者密碼:

  • passwd命令:
  • 幫助: man sslpasswd
  • openssl passwd -1 -salt SALT(最多8位)
  • openssl passwd -1 –salt centos

生成隨機數:

  • 幫助: man sslrand
  • openssl rand -base64|-hex NUM
  • NUM: 表示位元組數; -hex時,每個字元為十六進位制,相當於4位二進位制,出現的字元數為NUM*2

man sslpasswd

例子:

openssl passwd

預設使用: -crypt加密

例子1、

[[email protected] data]# openssl passwd 
Password: 
Verifying - Password: 
NNiotT0rFp20E

例子2、 

[[email protected] data]# openssl passwd -1
Password: 
Verifying - Password: 
$1$NfgvMVBF$g/fovTmTnv5B2OUKJvFr21

例子3、

[[email protected] data]# openssl passwd -1 -salt centos
Password: 
$1$centos$Uq6E6Wp5SDZYbs6MCmamP0

生成隨機數

例子:openssl rand -base64 12

[[email protected] data]# openssl rand -base64 12
WdOrd0ZhcRlLAnJ+

base64編碼機制的詮釋

例子:echo "ab" |base64 2^6=64

[[email protected] data]# echo -n "ab" |base64
YWI=

64個字元表示系統中的二進位制數

A-Z------十進位制---->0—25

a--------z十進位制----->97------>1100001

b--------十進位制------->98------>1100010

       a                                   b

01100001                  01100010

       a                                   b

011000       01 0110      001000

    24Y             22W              I

0-9

+(62)

/ (63) 64個字元

[[email protected] data]# echo -n "abc" |base64 > abc.base64

[[email protected] data]# cat abc.base64 
YWJj

base64編碼本身不加密,可以使用base64  -d  反向解析成原始碼

[[email protected] data]# base64 -d abc.base64 
abc

隨機口令多少位:openssl rand -base64 24|tr -d '/+' |head -c12

生成隨機口令 :cat /dev/urandom |tr -dc 'A-Za-z0-9' |head -c 12

[[email protected] data]# openssl rand -hex 10
21840dfde41df91375a6

openssl命令 對稱加密

openssl命令 對稱加密

公鑰加密:

  • 演算法: RSA, ELGamal
  • 工具: gpg, openssl rsautl( man rsautl)

數字簽名:

  • 演算法: RSA, DSA, ELGamal

金鑰交換:

  • 演算法: dh
  • DSA: Digital Signature Algorithm
  • DSS: Digital Signature Standard
  • RSA:

openssl命令 非對稱加密

生成金鑰對兒: man genrsa

生成私鑰

  • openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
  • (umask 077; openssl genrsa –out test.key –des 2048)
  • openssl rsa -in test.key –out test2.key 將加密key解密

從私鑰中提取出公鑰

  • openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
  • openssl rsa –in test.key –pubout –out test.key.pub

隨機數生成器:偽隨機數字

  • 鍵盤和滑鼠,塊裝置中斷
  • /dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
  • /dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟體生成偽隨機
[[email protected] data]# cat /dev/random |tr -dc "A-Za-z0-9" |head -c 12
Wwy3w7QwI9hk
[[email protected] data]# cat /dev/urandom |tr -dc "A-Za-z0-9" |head -c 12
AisDjYYIN3z7

例子:生成私鑰

1、不加密的私鑰

[[email protected] data]# openssl genrsa -out test.key 1024
Generating RSA private key, 1024 bit long modulus
..++++++
........................++++++
e is 65537 (0x10001)

2、使用dns3加密私鑰

[[email protected] data]# (umask 066;openssl genrsa -out test2.key -des3 2048)
Generating RSA private key, 2048 bit long modulus
.......................................+++
..............................................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for test2.key:
Verifying - Enter pass phrase for test2.key:

解密私鑰

[[email protected] data]# openssl rsa -in test2.key -out test22.key
Enter pass phrase for test2.key:
writing RSA key

[[email protected] data]# ls

 test2.key              test22.key        ###解密後出來的test22私鑰檔案

從私鑰中提取公鑰

[[email protected] data]# openssl rsa -in test2.key -pubout -out test2.pub
Enter pass phrase for test2.key:
writing RSA key

[[email protected] data]# ls

test2.key    test2.pub                ###從私鑰中提取出的公鑰