1、安裝Apache支持SSL/TLS算法
yum install mod_ssl openssl
2、建立證書apache
證書(Cerificate)的基本做用是將一個公鑰和安全個體(我的、公司、組織等)的名字綁定在一塊兒。瀏覽器
通常狀況下,製做證書要通過幾個步驟,如上圖所示。首先用openssl genrsa生成一個私鑰,而後用openssl req生成一個簽署請求,最後把請求交給CA,CA簽署後就成爲該CA認證的證書了。若是在第二步請求時加上-x509參數,那麼就直接生成一個self-signed的證書,即本身充當CA認證本身。安全
除了這種方式外,在Debian或者Ubuntu系統中有更加簡便的方法制做self-signed證書使用make-ssl-cert命令。該命令在ssl-cert的包裏,通常會伴隨着Apache的安裝而安裝,可能單獨安裝也能夠。服務器
若是您只是想作一張測試用的電子證書或不想花錢去找個 CA 簽署,您能夠造一張自籤 (Self-signed) 的電子證書。固然這類電子證書沒有任何保證,大部份軟件偶到這證書會發出警告,甚至不接收這類證書。 使用自簽名(self-signed)的證書,它的主要目的不是防僞,而是使用戶和系統之間可以進行SSL通訊,保證密碼等我的信息傳輸時的安全。curl
這裏先說下證書相關的幾個名詞:ide
RSA私鑰能解密用證書公鑰加密後的信息。一般以.key爲後綴,表示私鑰也稱做密鑰。是須要管理員當心保管,不能泄露的。測試
CSR(Certificate Signing Request)包含了公鑰和名字信息。一般以.csr爲後綴,是網站向CA發起認證請求的文件,是中間文件。網站
證書一般以.crt爲後綴,表示證書文件。編碼
CA(Certifying Authority)表示證書權威機構,它的職責是證實公鑰屬於我的、公司或其餘的組織。
因爲默認配置文件中證書名爲localhost.crt和localhost.key,這裏就按兩個文件名生成。
步驟一、生成私鑰
1 cd /etc/pki/tls/private/ 2 3 openssl genrsa -des3 -out localhost.key 1024
注:生成私鑰,須要提供一個至少4位的密碼
採用DES3加密新產生的私鑰localhost.key文件,每次要使用這個私鑰時都要用輸入密碼。若是您的電子證書是用在apache等服務器中,您每次啓動服務器時都要輸入密碼一次,咱們能夠在生成證書請求文件後,刪除私鑰的密碼。
1 cp localhost.key localhost.key.org 2 openssl rsa -in localhost.key.org -out localhost.key
1 openssl genrsa -out localhost.key 1024
注:採用128位rsa算法生成密鑰localhost.key文件,這種方法產生的證書在apache等服務器中啓動服務器時不會要求輸入密碼,同時也不會把私鑰加密。
步驟2: 生成證書請求文件(Certificate Signing Request)
1 openssl req -new -key localhost.key -out localhost.csr
注:這是用步驟1的密鑰生成證書請求文件localhost.csr, 這一步輸入內容和建立自簽名證書的內容相似,按要求輸入就能夠了。
步驟3: 簽署生成證書
您只要把localhost.csr這個檔案給第三方CA(Certificate Authority)機構簽署生成證書就能夠了。
1 openssl x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt
3、配置Apache
開啓apache 的LoadModule ssl_module modules/mod_ssl.so 模塊
開啓apache配置文件的 Include conf/extra/httpd-ssl.conf
ssl配置文件在/etc/httpd/conf.d/ssl.conf,默認就行,不須要更改。
這裏看下證書及密鑰的默認位置
1 cat /etc/httpd/conf.d/ssl.conf 2 3 SSLCertificateFile /etc/pki/tls/certs/localhost.crt 4 5 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
配置虛擬主機
編輯ssl.conf文件,加入證書對應的主機頭。
1 vi /etc/httpd/conf.d/ssl.conf 2 3 ServerName www.example.com
配置SSL證書
編輯配置文件,修改以下幾行:
1 vi /etc/httpd/conf.d/ssl.conf 2 3 SSLEngine on 4 5 SSLCertificateFile /etc/pki/tls/certs/localhost.crt 6 7 SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
注:若是SSLCertificateFile中指定的證書已包含相應私鑰,SSLCertificateKeyFile這一行就能夠註釋掉。
1 SSLEngine on 2 3 SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem 4 5 SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key 6 7 SSLCertificateChainFile /etc/ssl/certs/server-ca.crt
各指令含義:
SSLEngine :這個指令用於開啓或關閉SSL/TLS協議引擎。
SSLCertificateFile:該指令用於指定服務器持有的X.509證書(PEM編碼),其中還能夠包含對應的RSA或DSA私鑰。若是其中包含的私鑰已經使用密語加密,那麼在Apache啓動的時候將會提示輸入密語。
SSLCertificateKeyFile:指定了服務器私鑰文件(PEM編碼)的位置。若是SSLCertificateFile指定的服務器證書文件中不包含相應的私鑰,那麼就必須使用該指令,不然就不須要使用。
SSLCertificateChainFile:這個指令指定了一個多合一的CA證書,用於明確的建立服務器的證書鏈。這個證書鏈將被與服務器證書一塊兒發送給客戶端,由直接簽發服務器證書的CA證書開始,按證書鏈順序回溯,一直到根CA的證書結束,這一系列的CA證書(PEM格式)就構成了服務器的證書鏈。這有利於避免在執行客戶端認證時多個CA證書之間出現混淆或衝突。
測試Apache HTTPS
1 /etc/init.d/httpd restart
注:若是有設置的私人密鑰的密碼,則會要求輸入。
Apache/2.2.21 mod_ssl/2.2.21 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
Server www.example.com:443 (RSA)
Enter pass phrase:
OK: Pass Phrase Dialog successful.
curl https://localhost/ -k
-k參數的意思是容許不驗證訪問SSL站點,由於若是要驗證,就不能使用localhost作測試,而只能用生成證書時明確指定的域名。
訪問服務器時輸入https://域名(或IP),瀏覽器會彈出安裝服務器證實書的窗口。說明服務器已經支持SSL了。
4、其它知識點
在上面SSL站點配置文件中所使用的是」default「(默認虛擬主機),下面說下相關的知識點。
「default「(默認虛擬主機)虛擬主機能夠捕獲全部指向沒指定的IP地址和端口的請求。好比:一個沒被任何虛擬主機使用的地址/端口對。
僅當沒有其餘虛擬主機符合客戶端請求的IP地址和端口號時,」default「虛擬主機纔會捕獲這個請求。而且僅當」default「虛擬主機的端口號(默認值由您的Listen指定)與客戶端發送請求的目的端口號相符時,這個請求才會被捕獲。也可使用通配符(例如:」default:*」)來捕獲任何端口號的請求。
服務器配置示例:
1 <VirtualHost _default_:443> 2 3 DocumentRoot /www/default 4 5 ...... 6 7 </VirtualHost>
這段配置內容的意思是全部訪問這個WEB服務器的443端口的請求會被這個默認虛擬主機處理。
另外僅當客戶端鏈接的目的IP地址和端口號沒有指定並且不與任何一個虛擬主機(包括」default「虛擬主機)匹配的時候,纔會用主服務器來伺服請求。換句話說,主服務器僅捕獲沒有指定IP地址和端口的請求。