HTTP OVER SSL :


☆https是走對稱式加密還是非對稱式加密?

https 的連線結構:
1.client 對server提出https請求
2.Server 端會丟出 public key
3.client 端會以亂數產生session key,接著用Server 端的public key把
   session key加密,再丟回Server端
4.此時Server 端可拿到被public key 加密的session key(是session key 沒錯吧?)
   再來Server 端用private key 解開
5.此時,client 與server 端擁有相同的東西(session key)
6.再來的資料透過session key 做對稱式加密

註:現在IE支援加密長度128 (128除以8等於56 byte,session key 的長度)



https 結構漏洞:

Client 請求web連線(例:web bank:Qoo .IP:1.2.3.4)
1.第一步向DNS詢問Web 位置,
2.DNS回應web 的IP
3.client 向web 提出https連線
4.Qoo回應client 的請求。

入侵:
5.而cracker 建立一部與Qoo相似的web 網站,
6.cracker  入侵DNS,把Qoo的IP改為5.6.7.8
7.此時不知情的user 因此連線到IP:5.6.7.8,輸入了ID、Password 
   (此時帳號密碼被抓走)
8.cracker 再連線到 net bank(Qoo) ,即獲得user 的資源




因此 CA (Certificate Authorities 產生了
    CA擁有兩項能力:
    一:公信力(看不見、摸不著)
    二:public key 、private key 也是看不見,摸不著
        (應該說是憑證,而不是public key)



CA如何處理憑證申請書?
1.製作憑證申請書(內容包含User Information、user public key、user private key)
1.把憑證申請書交由CA處理(內容包含User Information、User public key)
2.把CA的資訊放入,代表那一家CA處理
3.放入有效期限(收費用)
4.再來CA把  "User information 、Public key 、CA Information 、Begin-End (有效期限)"
   這四項資訊抓出來,
   過過MD5 或 SHA或SHA1任選一種雜湊演算法,做出finger printer 
5.但到此時,還是不安全,因此,CA會拿出他的Private key ,把finger printer 加密起來,
   當完成這些事項後,它不再是憑證申請書,而是數位憑證




.
而一般小公司架設Web server ,又希望有https 的環境,可用自己架的linux 當CA Server ,


1.首先幫 WEB Server 產生憑證申請書(內容包含User information 、User 的Public key 、
   同時也會產生Private key)

   cd /usr/share/ssl/misc
   ./CA -newreq  (enter)
   出現
   writing new private key to 'newreq.pem'
   Enter PEM pass phrase: 12345
   Verifying - Enter PEM pass phrase:12345

在此結構有可能的問題,若private key 被偷,則小偷可解開資料,因此要先給private key 加上對稱式加密
再來輸入國別(一定要大寫),國家、城市、公司行號、部門
再來的CN最重要(Common Name (eg,your name or your server's hostname:))
一定要輸入Server 的URL(若與Web Server 的URL不相等,則憑證使用上會有警告訊息,
輸入管理者的email,再來按兩次enter 即可


時此,產生newreq.pem
前十八行是private key 
後十二行是憑證申請書
請把他分離,但憑證申請書名字一定要是"newreq.pem"
再來先把private key名字定為private_key.pem
再來把憑證送交CA 即可


產生 Root CA的方法
cd /usr/share/ssl/misc/
執行./CA -newca (enter)
使用預設名稱(enter)

加密private key
(不可忘記此password ,否則無法簽發憑證,除非重新產生Root CA

再來輸入CA的資訊
不要輸入你網站的資訊,這是簽發憑證中心,產生Root CA


Root CA憑證位置:
/usr/share/ssl/misc/demoCA/

Root CA 的private key:
/usr/share/ssl/misc/demoCA/private


再來憑證申請書放到
CA SERVER的 /usr/share/ssl/misc/之下


Root CA 執行簽章
./CA -sign  (enter)

輸入CA Server 的private key 密碼
按兩次enter

產生了憑證(newcert.pem)
此時憑證申請書可以丟了


而如何證實數位憑證是否被竄改
方法:
當拿到馮證後,把這四項資訊抓出來(User Info 、public key 、CA info 、Begin -end ),
然後針對這四頁資訊透過MD5 or SHA or SHA1做雜湊運算,就可得到finger printer (這是立即運算出來的),
再來,數位憑證是CA用private key 加密的,除非拿到CA的Private key ,才有辦法偽造
(但CA的private key 是不可能拿的到的)

如果能拿到CA的public key 就可以解開數位憑證,得到finger printer,
各大作業系統的瀏覽器中有CA的憑證(憑證中有public key),如此就能比對finger printer 了



再來是應用了:
把產生出來的憑證與private key 複製到 web server 的 /etc/httpd/conf/ssl.crt/之下
key 與憑證檔名自訂:(newcert.pem、private_key.pem)

在httpd.conf 
最後加入:


<NameVirtualHost *:443>


<VirtualHost *:443>
     SSLEngine on
     SSLCertificateFile    conf/ssl.crt/newcert.pem
     SSLCertificateKeyFile conf/ssl.crt/private_key.pem
     DocumentRoot /var/www/html_2      (home folder)
     ErrorLog logs/errorlog-error_log
     CoustomLog logs/errorlog-access_log common
</VirtualHost>



註:httpd的VirtualHost 分為name base 與ip base ,但
    HTTP OVER SSL一定要用IP Base的)


service httpd  reset 
後輸入private key 的 密碼就ok了
如果不想每次restart 要輸入private key 密碼的話:

拿掉private key 的密碼:
openssl rsa -in private_key.pem -out private_key_ok.pem


如果不想建Root CA的話…
就讓web server 自己當Root CA,自己對自己授權:
cd /usr/share/ssl/certs/
make newcert.prm

把newcert.pem 拿到/etc/httpd/conf/ssl.crt/下用(這樣的話,private key 就沒密碼了

Johnson 發表在 痞客邦 留言(0) 人氣()