OpenSSL

一、什么是OpenSSL

在電腦網絡上,OpenSSL是一個開放源代碼的軟件庫包,應用程序可以使用這個包來進行安全通訊,避免竊聽,同時確認另一端連接者的身份。這個包廣泛被應用在互聯網的網頁服務器上。其主要庫是以C語言所寫成,實現了基本的加密功能,實現了SSL與TLS協議。

OpenSSL由三部分組成:

    libencrypto庫

    libssl庫

    openssl多用途命令行工具

二、OpenSSL加密算法和協議

1、對稱加密算法

    特性:

        加密、解密使用同一個密鑰

        將原始數據分割成為固定大小的塊,逐個進行加密

    缺陷:

        密鑰過多

        密鑰分舵困難

 常用算法:

    DES、3DES、AES、Blowfish、Twofish等等

2、公鑰加密算法

    密鑰分為公鑰與私鑰:

        公鑰:從私鑰中提取產生;可以公開給所有人

        私鑰:通過工具闖將,使用者自己留存,必須保證其私密性

        特點:用公鑰加密的數據,只能使用與之對應的私鑰解密,反之亦然

    用途:

        數字簽名:主要用于讓接收方確認發送放的身份

        密鑰交換:發送發用對方公鑰加密一段對稱密鑰,并發送給對方

    算法:

        RSA:1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的,RSA就是他們三人姓氏開頭字母拼在一起組成的。

        DSA:Digital Signature Algorithm 數字簽名算法

3、單向加密

    特性:定長輸出、雪崩效應

        # 雪崩效應指,其中以為發生變化,都會給結果帶來翻天覆地的變化

    功能:數據完整性

    算法:

        md5:Message Digest 5, 128bits 消息摘要

        sha1:Secure Hash Algorithm 1, 160bits 安裝的hash算法

        sha224、sha256、sha384、sha512(都為sha家族,224長度為224位,其他意義相同)

4、密鑰交換

    公鑰加密:通過獲取對方的公鑰對數據進行加密,只有對方的私鑰才能解密

    DH算法(Deffie-Hellman):由兩個人名組成

三、公鑰加密解密過程圖解

spacer.gif公鑰加密過程_看圖王.png

四、各加密算法管理命令

openssl:默認在Centos 7上面默認安裝,可以直接使用,有很多子命令可以分別管理。

    子命令分為三類:

        標準命令

        信息摘要命令(dgst命令)

        加密命令(enc子命令)

    標準命令:enc,ca,req,genrsa等等

1、對稱加密

    工具:openssl enc

    支持的算法:3des,aes,blowfish,towfish

    enc命令:

        加密:# openssl  enc  -e  -des3  -a  -salt  -in fstab   -out fstab.ciphertext

解密:# openssl  enc  -d  -des3  -a  -salt  -out fstab   -in fstab.ciphertext

spacer.gif對稱加密解密.gif

2、單向加密

    工具:openssl dgst,md5sum,sha1sum,sha224sum等等

    dgst命令:

        # openssl  dgst  -md5  /PATH/TO/SOMEFILE

# openssl dgst -md5 /etc/fstab 
MD5(/etc/fstab)= e5ee5d6d40cf1983771c8650df455135
# md5sum /etc/fstab 
e5ee5d6d40cf1983771c8650df455135  /etc/fstab
# sha1sum /etc/fstab 
5f3a9f070f56a355ca68d86028c95dca5c4bcb2f  /etc/fstab
# sha224sum /etc/fstab 
fd8e80dc3e6479d254b50e7f0c05d7897a99ed951c3f81ec1fec362a  /etc/fstab
# sha512sum /etc/fstab 
9893ded3aa749d79e6e714dd3ca81454e05243f7655633cef06719365c1e7b27a372705752ac751a2adeced881952627d02767c9aa305db31ee1de87b428804a  /etc/fstab

3、生成用戶密碼

    工具:passwd,openssl passwd

# openssl passwd -1 -salt $(openssl rand -hex 10)
Password: 
$1$0d9d2f2e$Ty3KtAwkijG5zIU08ixay.

4、生成隨機數

    工具:openssl rand

# openssl  rand  -hex  NUM

# openssl  rand  -base  NUM

# openssl rand -hex 10
6d989f629da63bb40948
# openssl rand -base64 10
3JXUSebo5uMlfw==

# 注意復制base64的隨機數時,不要復制后門的“==”號

5、公鑰加密

    生成密鑰:

生成私鑰: # (umask 077;  openssl  genrsa  -out  /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS)

提出公鑰: #  openssl  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout

    # 注意:因為私鑰必須保證其安全,所以其umask應該為077,放在括號中執行,表示在子shell中執行,可以不影響當前shell

# (umask 077;openssl genrsa -out /opt/http)
Generating RSA private key, 1024 bit long modulus
.........................++++++
...............++++++
e is 65537 (0x10001)
# openssl rsa -in /opt/http -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCw554Lm/+x+eGJRfqk5YpDLkLj
NvAO2t8P6DQHc5l2pnm1vw6KnWTPB0V4S2P87E2fI1QV0RplTD832FBpina/fsz4
iGjv1CfjA8kwQ0wMJfrqqtOHAsmeKUmAqJvtSGhLy8b0Lx1AWxGBPKg32PmmhCQE
tnROn/cXwb8Od80unwIDAQAB
-----END PUBLIC KEY-----

五、PKI及創建私有CA

PKI:公鑰基礎設施(Public Key Infrastructure)

        簽證機構:CA

        注冊機構:RA

        證書吊銷列表:CRL

        整數存取庫

SSL:Secure sockets Layer

    由Netscape公司在1994年研發,其版本有V1.0,V2.0,V3.0 其中V3.0最為主流,但是前一段時間google驗證出其有bug,所以建議使用TLS

TLS:Transport Layer Security

    有IETF研發:其版本有V1.0, V1.1, V1.2, V1.3主流版本為V1.2

創建私有CA:

    openssl命令:

        配置文件:/etc/pki/tls/openssl.cnf

    在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可

    步驟:

        (1) 生成私鑰;

# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

(2) 生成自簽證書;

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

-new:生成新證書簽署請求;

-x509:生成自簽格式證書,專用于創建私有CA時;

-key:生成請求時用到的私有文件路徑;

-out:生成的請求文件路徑;如果自簽操作將直接生成簽署過的證書;

-days:證書的有效時長,單位是day;

(3) 為CA提供所需的目錄及文件;

    # mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}
    # touch  /etc/pki/CA/{serial,index.txt}
    # echo  01 > /etc/pki/CA/serial

測試并申請簽署證書:

    步驟:(以httpd為例)

(1) 用到證書的主機生成私鑰;

# mkdir  /etc/httpd/ssl 
# cd  /etc/httpd/ssl
# (umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)

(2) 生成證書簽署請求

# openssl  req  -new  -key  /etc/httpd/ssl/httpd.key  -out /etc/httpd/ssl/httpd.csr  -days  365[object Object]

wKioL1cOXu7Dp-eGABBw7VXrPRg077.gif

(3) 將請求通過可靠方式發送給CA主機;

這里使用scp(本次僅用于測試使用,密鑰傳輸時必須保證其安全,可以使用u盤復制)

# scp httpd.csr 172.18.250.108:/opt/
root@172.18.250.108's password: 
httpd.csr                                              100% 1094     1.1KB/s   00:00

(4) 在CA主機上簽署證書;

# openssl ca  -in  /tmp/httpd.csr  -out  /etc/pki/CA/certs/httpd.crt  -days  365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1(0x2)
        Validity
            Not Before: Apr 10 15:45:54 2016 GMT
            Not After : Apr 10 15:45:54 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = beijing
            organizationName          = ops
            organizationalUnitName    = ops
            commonName                = ops.com
            emailAddress              = admin@ops.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                08:A3:DD:98:D3:E0:42:58:5E:B7:24:43:6C:3D:B1:D8:02:34:16:46
            X509v3 Authority Key Identifier: 
                keyid:75:63:44:2C:46:80:2F:84:CE:EF:C6:F1:F2:E7:75:2E:EF:17:37:C2
Certificate is to be certified until Apr 10 15:45:54 2017 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

查看證書中的信息:

# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

對于SSL就寫到這里了,感覺寫的不錯可以給點個贊。 
 作者:Ace QQ1257465991 Linux運維攻城獅一只 
 Q/A:如有問題請慷慨提出

原創文章,作者:Ace,如若轉載,請注明出處:http://www.www58058.com/15242

(0)
AceAce
上一篇 2016-04-25
下一篇 2016-04-26

相關推薦

  • 馬哥教育網絡19期+第十三周課程練習

    1、建立samba共享,共享目錄為/data,要求:(描述完整的過程)   1)共享名為shared,工作組為magedu;   2)添加組develop,添加用戶gentoo,centos和ubuntu,其中gentoo和centos以develop為附加組,ubuntu不屬于develop組;密碼均為用戶名;   3)添加s…

    Linux干貨 2016-08-12
  • 馬哥教育網絡班22期+第16周課程練習

    1、源碼編譯安裝LNMP架構環境; 安裝開發包組 yum groupinstall "Development Tools" "Server Platform Development" -y yum install -y …

    Linux干貨 2017-01-03
  • 淺談群紅包的實現

    前言:紅包是支付的方式, 也是社交的延伸。群紅包在這兩塊領域串聯得很好, 表現尤為的濃墨重彩. 承接上兩篇技術淺談:1). 淺談接龍紅包的技術實現.2). 淺談微信紅包搖一搖的技術實現.這一次, 讓我們談談群紅包的技術實現. 一為是紅包的分配算法, 二為競搶的技術實現. 分配算法:最初玩群紅包的時候, 并沒有意識到分配算法的難度…

    Linux干貨 2015-03-10
  • 文件系統知一二

    文件系統知一二 What?文件系統是什么?     我們經常說文件系統,那么文件系統是什么東西呢?    計算機的文件系統是一種存儲和組織計算機數據的組織結構。 常見的文件系統有哪些?           &n…

    Linux干貨 2016-03-09
  • N21 第八周 總有刁民想害朕

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋將兩個相似的網絡連接起來,并對網絡數據的流通進行管理。它工作于數據鏈路層,不但能擴展網絡的距離或范圍,而且可提高網絡的性能、可靠性和安全性。 集線器的英文稱為“Hub”。主要功能是對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把所有節點集中在以它為中心的節點上。它…

    Linux干貨 2016-09-15
  • LINUX命令歷史

    LINUX命令歷史 LINUX的命令歷史是什么? linux的命令歷史的作用是,記錄執行過的命令。如果你經常使用 Linux 命令行,那么使用 命令歷史可以有效地提升你的效率。history(管理歷史命令)語法:[root@localhost]#history(選項)(參數)選項:n:n為數字,要列出最近的 n 筆命令列表-c(清空所有歷史命令)-d (刪除…

    2017-09-14
欧美性久久久久