openssl+http實現https

openssl詳解及實現https

OpenSSL 是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用。

秘鑰算法和協議:

  • 對稱加密:
    加密和解密使用同一個密鑰,原始數據分成固定大小塊,算法不同
    秘鑰過多,秘鑰分發困難
    DES,3DES  AES  Blowfish  Twofish  IDEA  RC6 CAST5

  • 公鑰加密:
       分公鑰與私鑰
           公鑰:從私鑰中提取產生,可公開給所有人;pubkey
           私鑰:通過工具創建,使用者自己留存保證其私密性;secret key
       數字簽名:(私鑰加密的特征碼)接受方確認發送方身份
       秘要交換:發送方用對方公鑰加密一個對稱秘鑰 發送給對方
       數據加密:不常用公鑰進行數據加密 慢,RSA,DSA

    發送方:

    接收方:

    1. 用自己的私鑰解密對稱秘鑰

    2. 用對稱秘鑰解密整段數據–保密性

    3. 用發送方的公鑰解密特征碼–驗證發送方身份

    4. 計算特征碼與接收的特征碼作比較–保證數據完整性
      可能出現中間人。要可靠的拿到對方公鑰:CA

    1. 計算數據的特征碼

    2. 用自己的私鑰加密這段特征碼

    3. 生成臨時對稱秘鑰(一次性),用其加密整段數據(包括加密的特征碼)

    4. 用接收方的公鑰加密臨時對稱秘鑰附加在數據后

  • 單向加密:
    提取數據指紋,只能加密不能解密
    定長輸出,雪崩效應
    保證數據完整性
    算法: md5  固定128位輸出
    sha1 160,224,256,384,512

秘要交換:公鑰交換
 DH:利用 已知大質數的高次方的結果   反求次方極難
 協商生成p,g   本機生成x,將 p^x%g 的結果發送
 接收方本機生成y   求 (p^x%g)^y   對方 (p^y%g)x  結果相同
 RSA ECDH ECDHE

PKI: Public Key Infrastructure

  • 簽證機構:CA(Certificate Authority)
    注冊機構:RA
    證書吊銷列表:CRL
    證書存取庫:

X.509:定義了證書的結構以及認證協議標準

  • 版本號
    序列號
    簽名算法
    頒發者
    有效期限
    主體名稱
    主體公鑰
    CRL分發點
    擴展信息
    發行者簽名

SSL: Secure Socket Layer
TLS: Transport Layer Security

數據保密性
數據完整性
安全驗證


OpenSSL:開源項目,三個組件

  • openssl: 多用途的命令行工具

  • libcrypto: 加密算法庫

  • libssl:加密模塊應用庫,實現了ssl及tls

# openssl
標準命令,消息摘要命令,加密命令

openssl enc
   -e:加密
   -d:解密
   -a:文本編碼格式
   -salt:鹽
   -in:要處理的文件
   -out:要輸出的文件
]# openssl enc -e -rc4 -a -salt -in fstab -out fstab.en 加密

單向加密:計算特征碼

openssl dgst -   FILE
   md2 md4 md5 rmd160  sha sha1

]# md5sum FILE
]# openssl dgst -md5 FILE   md5加密

生成用戶密碼:

openssl passwd -1 -salt SALT

生成隨機數:

openssl rand [base64|hex] #
   base64:
   hex16進制編碼
   #:長度
]# openssl rand -base64 10  使用時去掉尾部兩個“==”
GyA/hYBNH20RAQ==

https:http+openssl

環境:
Web:CentOS 6.8,10.1.235.6
CA:CentOS 7,10.1.235.7
關閉防火墻及selinux

CentOS 7,10.1.235.7:
建立私有CA:

    生成私鑰:指定位置
]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
   生成字簽證書:
]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
   -new:生成新證書簽署請求
   -x509:生成自簽格式證書,用于創建私有CA,其它情況不加
   -key:生成請求時用到的私鑰路徑
   -out:生成的請求文件路徑,若自簽操作將直接生成簽署過的證書
   -days:證書的有效時長
...
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Class
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.zjj.com
Email Address []:

創建所需文件:
]# touch /etc/pki/CA/{serial,index.txt}
]# echo 01 > /etc/pki/CA/serial

CentOS 6.8,10.1.235.6:
安裝配置http服務:

安裝http及mod_ssl模塊
]# yum install httpd mod_ssl
]# vi /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80
取消注釋更改 ServerName www.zjj.com:80

DocumentRoot "/var/www/html"
注釋該行 #DocumentRoot "/var/www/html"
保存退出

生成證書請求:

]# mkdir /etc/httpd/ssl
]# cd /etc/httpd/ssl

   生成私鑰:
]# (umask 077;openssl genrsa -out  httpd.key 2048)

   生成證書請求:
]# openssl req -new -key httpd.key -out httpd.csr
...填入相關內容
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Class
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:www.eva.com
Email Address []:
...

   將請求發送至CA主機:
]# scp ../ssl/httpd.csr  10.1.235.7:/
    在CA主機上簽署:CentOS 710.1.235.54
]# openssl  ca -in httpd.csr -out httpd.crt -days 365
   將證書發送至Web主機
]# scp httpd.crt  10.1.235.6:/etc/httpd/ssl

Web主機配置ssl,找到以下兩行,更改對應的證書及私鑰文件:

]# vi /etc/httpd/conf.d/ssl.conf

SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

在虛擬主機標簽內添加:
Documentroot /virtual
<Directory /virtual>
   Options None
   AllowOverRide None
</Directory>

]# mkdir /vitual
]# vi /virtual/index.html   創建首頁文件
<center>https from 10.1.235.6</center>

測試:

/etc/hosts文件中添加一條域名解析
10.1.235.6  www.eva.com

可以在Cent 7上指定證書訪問:未指定證書訪問https會報錯
]# curl --cacert /etc/pki/CA/cacert.pem https://www.eva.com
<center>https from 10.1.235.6</center>

windows中可以將證書導入為受信任的根證書

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

(0)
JasperJasper
上一篇 2016-10-24
下一篇 2016-10-24

相關推薦

  • Centos6.9 配置靜態IP

    Centos6.9 配置靜態IP修改步驟

    2018-03-26
  • CentOS7系統用戶空間管理進程systemd詳解

    概述:     系統啟動過程中,當內核啟動完成,后加載根文件系統,后就緒的一些用戶空間的服務的管理工作,就交由init進行啟動和管理,在CentOS6之前的init的管理方式都類似,相關的內容我們在之前的文章中也做出過介紹。在CentOS7上,init變成了systemd,其管理方式也發生了重大的變化,本章就跟大家歐一…

    Linux干貨 2016-09-21
  • LVM練習及quota和dd命令

    練習 1、創建一個至少有兩個PV組成的大小為20G的名為testvg的 VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏 輯卷testlv;掛載至/users目錄 第一步!首先準備足夠大的硬盤來實驗 [root@Cloud /]#lsblk  #添加了/dev/sdb/c硬盤  NAME &nb…

    Linux干貨 2016-09-09
  • Ansible安裝部署及常用模塊詳解

    Ansible命令使用 Ansible語法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> -m NAME,–module-name=NAME:指定執行使用的模塊 -u USERNAME,–user=USERNAME:指定遠程…

    2017-07-11
  • 馬哥教育網絡班22期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# w | tail -n+3 | cut -d" " -f1 | sort |&…

    Linux干貨 2016-08-29
  • 0812作業

    練習題 1、查找/var目錄下屬主為root,且屬組為mail的所有文件 ?2、查找/var目錄下不屬于root、lp、gdm的所有文件 ?3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件 ?4、查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件 ?5、查找/etc目錄下大于1M且類型為普通文件的所有文…

    Linux干貨 2016-08-15
欧美性久久久久