給網站配置上HTTPS加密訪問(Centos7+Apache+SSL證書)

敘話

今天給一個網站配置了ssl證書,過程當中踩到不少坑,前先後後耗時6個小時才查明問題,在此記錄下,以做後續參考。html

準備

已有網站 http://www.example.com,給其配置ssl證書,使得訪問 https://www.example.com。apache

 

SSL證書申請

SSL證書申請方式,網上有不少免費的我的證書直接申請。也可本身使用工具手動生成,但會產生 「未受權訪問被拒絕,或者安全性設置已到期 / :ERR_CERT_AUTHORITY_INVALID 」,不建議使用。centos

通常申請到的證書,會給你三個文件。先將以上文件所有上傳到服務器。安全

上傳到任何目錄都可,不限制,可按照文中來,後續修改bash

*.cer   上傳到 /etc/pki/tls/certs/目錄   文件名:www.explame.com.cer服務器

*.crt    上傳到 /etc/pki/tls/certs/ 目錄 www.explame.com.crt工具

*.key   上傳到/etc/pki/tls/private/目錄 www.explame.com.key測試

很失敗的,我第一個坑踩到了證書文件上,後面講下具體起因。網站

編譯安裝mod_ssl.so

以前的環境是yum安裝的httpd方式,編譯安裝的請搜索編譯安裝mod_ssl.so方法。編碼

yum安裝方式:

yum install mod_ssl

安裝完畢後,默認會給你生成一堆配置及mod_ssl.so 且已加載。

/etc/httpd/conf.d/ssl.conf SSL默認配置文件

網上不少教程都會教你在當前這個默認文件裏修改配置使用,其實這個文件徹底能夠不用修改的,忽略他,在你自己存在的網站配置上修改也同樣起效。這個坑,不少人容易踩。

增長配置

本來配置

<VirtualHost *:80>
    ServerName default
    DocumentRoot "/var/WEB/default/wwwroot"
    ServerAlias www.example.com www.local116.com
    ErrorLog "/var/WEB/default/log/error.log"
    CustomLog "/var/WEB/default/log/access.log" common
</VirtualHost>

追加配置

<VirtualHost *:443>
    ServerName www.example.com:443
    DocumentRoot "/var/WEB/default/wwwroot"
    ServerAlias www.example.com www.local116.com 
    ErrorLog "/var/WEB/default/log/error.log"
    CustomLog "/var/WEB/default/log/access.log" common
    SSLEngine on
    SSLCertificateFile "/etc/pki/tls/certs/www.example.com.crt"
    SSLCertificateKeyFile "/etc/pki/tls/private/www.example.com.key"
</VirtualHost>


###詳解配置###
<VirtualHost *:443>  主要是443的匹配做用,決定該網站接收端口


ServerName www.example.com:443 域名後面的:443 無關緊要

ServerAlias 這裏配置的全部域名都將可使用https訪問,前提是證書支持這些域名

SSLEngine on 開啓SSL
SSLCertificateFile 配置證書文件
SSLCertificateKeyFile 配置證書祕鑰文件

配置追加完畢後,重啓httpd(很重要)。

方式一:

httpd -k stop

httpd -k start (無錯誤及其餘任何信息提示,覺得是啓動成功了,訪問網頁發現是決絕訪問,查看進程以後發現httpd根本沒有啓動)

方式二:

systemctl restart httpd.service 

查看錯誤發現基本是找不到什麼具體錯誤的

通過反反覆覆測試,改刪配置才搞清出問題。

CRT - CRT應該是certificate的三個字母,其實仍是證書的意思,常見於*NIX系統,有多是PEM編碼,也有多是DER編碼,大多數應該是PEM編碼,相信你已經知道怎麼辨別.

CER - 仍是certificate,仍是證書,常見於Windows系統,一樣的,多是PEM編碼,也多是DER編碼,大多數應該是DER編碼.

KEY - 一般用來存放一個公鑰或者私鑰,並不是X.509證書,編碼一樣的,多是PEM,也多是DER.

由於當前使用的centos(LINUX系),使用的證書並非.crt仍是csr。

意識到配置中的證書文件選擇錯了,將其修改過來。

<VirtualHost *:443>
    ServerName www.example.com:443
    DocumentRoot "/var/WEB/default/wwwroot"
    ServerAlias www.example.com www.local116.com 
    ErrorLog "/var/WEB/default/log/error.log"
    CustomLog "/var/WEB/default/log/access.log" common
    SSLEngine on
    SSLCertificateFile "/etc/pki/tls/certs/www.example.com.csr" #此處修改成csr文件
    SSLCertificateKeyFile "/etc/pki/tls/private/www.example.com.key"
</VirtualHost>

再次從新啓動httpd

systemctl restart httpd.service

這次終於啓動成功,還有不少問題,譬如配置證書,http能夠訪問,https沒法訪問文件(404)大多都是由於證書引發的,必須確認訪問的域名配置的域名以及申請證書的域名是一致的。

 

443端口監聽失敗

注意,默認ssl.conf裏面已經配置監聽443端口的操做。不能再httpd.conf或者其餘虛擬主機.conf裏面增長監聽,不然也會引發沒法啓動httpd。

ssl.conf

Listen 443 https

遇到一些用戶說,將apache httpd升級到2.4以後須要修改這個配置。

Listen 127.0.0.1:443 https

給其增長IP綁定,我測試發現並非必須的,ssl.conf是不須要改一個字符的。

當前版本: Apache/2.4.6 (CentOS)

若是遇到問題,能夠嘗試修改此處,測試是否得以解決。

 

查看相關日誌

systemctl status httpd.service -l

tail /var/log/messages

若是發現是關於443的問題,檢查後臺是否有其餘程序監聽443。

netstat -nao|grep 443

或者檢查全部被httpd引入的文件是否出現多個監聽端口(Listen 443),若有修改後通常問題則解決。

可使用httpd -S 查看當前httpd加載的文件配置,逐個進行排查。

 

總結

檢查如下問題,保證無誤,基本能解決問題。

  1. 證書申請的域名以及證書的文件無誤
  2. 不一樣服務器加載的證書文件不一樣,根據不一樣服務器選擇不一樣證書文件,且文件位置存在該文件。
  3. 保證全部被httpd加載的配置文件不能包含多個監聽同一端口指令。如:Listen 443
  4. 保證無其餘程序佔用443及80等自行監聽的虛擬主機端口。netstat 檢測
  5. 網頁沒法顯示完整,查看網頁源碼發現,如網頁中出現http連接,因爲https安全機制限制,則須要將其連接更改成https便可,如:https://example.com,另外可更改使用 //example.com,將自動識別當前協議,自動加載。

 

本文引用:

那些證書相關的玩意兒(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等) 

相關文章
相關標籤/搜索