next up previous contents
Next: HTTPS 安全網站架設 Up: Apache 2.4 HTTP Server Previous: http 網頁架設   Contents

*建立 TLS 憑證

  1. 本節不是課程範圍,但要建立 HTTPS 網站前必須有 TLS 憑證,本節為產生方式說明。
  2. Transport Layer Security (TLS) 是一種網路加密通信的方式。TLS 是 Secure Sockets Layer (SSL) 的接續協定,TLS 允許用戶端與伺服器端的互相驗證。
  3. TLS 以憑證為概念,憑證包含:公鑰、伺服器身份、憑證頒發單位的簽名。對應的私鑰永遠不會公開,任何使用私鑰加密的密鑰數據只能用公鑰來解密,反之亦然。加密通信流程:
    1. 用戶端交握訊息給要連線的伺服器,訊息有包含時間戳的 32 位元隨機數字、加密協定、用戶端支援的加密方式。
    2. 伺服器回應訊息包含另一個包含時間戳的 32 位元隨機數字、加密協定、用戶端加密方式,另也將伺服器憑證傳送給用戶端。
    3. 用戶端經由檢查身分確認伺服器,檢查所有簽章是否為用戶端所有,如果確認就使用交換的 32 位元隨機數字產生會話密鑰 (session key) 及一密鑰。用戶端用伺服器的公鑰加密會話密鑰,再傳送給伺服器。
    4. 伺服器使用私鑰解開會話密鑰,伺服器與用戶端就可開始此會話密鑰連線,傳送加密資料並加解密。
    Image TLS_handshake
  4. 安裝 opensssl。
    [root@kvm5 ~]# yum install -y openssl
    
  5. 若先前已有舊憑證,都先移除。
    [root@kvm5 ~]# CADIR=/etc/pki/CA
    [root@kvm5 ~]# rm -f /etc/pki/tls/certs/kvm5.*
    [root@kvm5 ~]# rm -rf $CADIR/*
    
  6. 設定自己的憑證管理中心(Certification Authority,CA) 環境。
    [root@kvm5 ~]# mkdir -p /etc/pki/CA/private 2>/dev/null
    [root@kvm5 ~]# mkdir -p $CADIR/{certs,newcerts}
    [root@kvm5 ~]# touch $CADIR/index.txt
    [root@kvm5 ~]# /bin/cp /etc/pki/tls/openssl.cnf $CADIR/
    [root@kvm5 ~]# echo 01 > $CADIR/serial
    
  7. 產生自己的憑證管理中心(Certification Authority,CA)。
    [root@kvm5 ~]# cd $CADIR
    [root@kvm5 ~]# openssl req -days 999 -new -x509 -nodes \
    -out cacert.pem \
    -keyout private/cakey.pem \
    -subj '/C=TW/ST=Taiwan/L=CYUT/O=CSIE/OU=DEYU/CN=kvm5.deyu.wang'
    
  8. 產生自己 CA 簽章的 TLS 憑證。
    [root@kvm5 ~]# cd /etc/pki/CA/certs
    [root@kvm5 ~]# openssl req -days 999 -new -nodes \
     -out kvm5.csr -keyout kvm5.key \
     -subj '/C=TW/ST=Taiwan/L=CYUT/O=CSIE/OU=DEYU/CN=kvm5.deyu.wang'
    [root@kvm5 ~]# openssl ca -batch -config ../openssl.cnf -days 999 \
    -in kvm5.csr -out kvm5.crt -keyfile $CADIR/private/cakey.pem \
    -cert $CADIR/cacert.pem -policy policy_anything
    
  9. 安裝憑證到網站要使用的目錄。
    [root@kvm5 ~]# cp $CADIR/cacert.pem /etc/pki/tls/certs/kvm5.pem
    [root@kvm5 ~]# cp kvm5.crt /etc/pki/tls/certs/kvm5.crt
    [root@kvm5 ~]# cp kvm5.key /etc/pki/tls/private/kvm5.key
    



2017-10-27