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 21:15
下一篇 2016-04-26 11:02

相關推薦

  • Linux文件三劍客sed命令用法詳解

    sed是一種流編輯器,它是文本處理中非常強大的工具,能夠完美的配合正則表達式使用,用法簡單實用,非常靈活。??????? 工作原理:sed命令處理文本時,把當前處理的行存儲在一個臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。 在…

    2017-06-24
  • M22 程序員偷懶戰法

    前段時間有個外國的程序猿走紅網絡,這個哥們可以說是懶到了極點,上班請假給領導發短信寫腳本,下班晚回家給老婆發短信寫腳本,甚至于接個咖啡也要寫腳本。這個哥們離職之后,他的同事在他的辦公電腦上發現了這些腳本,并公布到了網上,引起眾程序猿紛紛膜拜。最近我剛好學到shell腳本部分,就讓我分析其中的一個跟領導請假的腳本吧。 #!/bin/sh -e # Exit e…

    Linux干貨 2017-04-06
  • CentOS 7 tomcat 7.0.54 的功能實現及詳解

    一、 jdk 安裝配置 # yum install java-1.8.0-openjdk-devel (依賴的java-1.8.0-openjdk,java-1.8.0-openjdk,headless也會被安裝 ) # alternatives -h # vim /e…

    Linux干貨 2014-06-09
  • 位置變量&特殊變量總結

    位置變量 常用的位置變量有 $1, $2, $3 ……,表示命令行傳給腳本的第一個參數,第二個參數,第三個參數。。。 $0 表示腳本的文件名,比如a.sh 位置變量在腳本中的主要作用,是讓腳本通過他們來獲取命令行傳遞給腳本的參數。 變量位置調整 shift [n] 用于調整變量位置 第n+1個位置變量會被重新命名為$1…

    Linux干貨 2016-08-15
  • N22-love cat第19周 – 基于Apache + Tomcat +2種模式實現負載均衡以及配置集群seesion服務

      基于Apache+Tomcat實現負載均衡和集群服務 一、概念     從Tomcat權威指南中的測試數據,我們不難發現,對于靜態頁面的數據,Tomcat的處理速度比Apache要快很多,所以為什么要整合apache雖然在處理靜態頁面速度上比Apache快,但是Tomcat經不起大的并發量容易死。為此,我們就需要A…

    Linux干貨 2016-08-29
  • 第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題 光標跳轉 字符間跳轉 h或向左箭頭鍵 光標向左移動一個字符 j或向下箭頭鍵 光標向下移動一個字符 k或向上箭頭鍵 光標向上移動一個字符 l或向右箭頭鍵 光標向右移動一個字符 翻屏 Ctrl+f 屏幕向下移動一頁 Ctrl+b 屏幕向上移動一頁 Ctrl+d 屏幕向下移動半頁 Ctrl+u 屏幕向上移動半頁 Ent…

    Linux干貨 2017-01-22
欧美性久久久久