CentOS下配置Apache HTTPS

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這一行就能夠註釋掉。

  • 若是是第三方簽署的CA證書,按以下配置:
  • 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

  • 重啓Apache
  • 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來驗證

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地址和端口的請求。

相關文章
相關標籤/搜索