今天給一個網站配置了ssl證書,過程當中踩到不少坑,前先後後耗時6個小時才查明問題,在此記錄下,以做後續參考。html
已有網站 http://www.example.com,給其配置ssl證書,使得訪問 https://www.example.com。apache
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測試
很失敗的,我第一個坑踩到了證書文件上,後面講下具體起因。網站
以前的環境是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)大多都是由於證書引發的,必須確認訪問的域名和配置的域名以及申請證書的域名是一致的。
注意,默認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加載的文件配置,逐個進行排查。
檢查如下問題,保證無誤,基本能解決問題。
本文引用: