通常在項目里,如果要用到ssl的話,一般都是自己先做個免費的證書在開發的過程中用的。等到上線了才去花錢買ssl證書。
這一回,自制了證書,在apache里也配置好后,始終無法通過https訪問。調查步驟如下
1、確認apache配置。
httpd.conf里,查看mod_ssl.so和httpd-ssl.conf配置。如果沒有mod_ssl.so的話,通過apachectrl-l查看apache是否有內置變異了ssl模塊。
httpd-ssl.conf里,查看Listen443、server.crt、server.key的配置。
2、apache重啟的時候,在error-log里查看有沒有錯誤日志。
到這一步,可以確定配置應該沒什么問題。
3、在服務器里,通過命令netstat-ano確定443端口被監聽。
4、本地通過命令telnetwww.xxxx.com80和telnetwww.xxxx.com443,發覺80端口能訪問,443端口訪問不了。
5、在服務器里通過命令wgethttp://www.xxx.com/和wgethttps://www.xxxx.com/,同樣發覺80端口能連接的上,443端口連接不上。
Resolvingstaging.shop.connectingcard.com...xxx.xxx.xxx.xx
Connectingtowww.xxxx.com|xxx.xxx.xxx.xx|:80...connected.
...
Resolvingwww.xxxx.com...xxx.xxx.xxx.xx
Connectingtowww.xxxx.com|xxx.xxx.xxx.xx|:443...
到這一步,可以確定應該是443端口訪問不了的原因。
6、查看服務器的iptables,確定443沒有禁止訪問。
7、在服務器,使用wget命令,通過本地IP訪問
wgethttps://xxx.xxx.xxx.xx/,得到如下結果
--2012-02-2911:21:05--https://xxx.xxx.xxx.xx/
Connectingtoxxx.xxx.xxx.xx:443...connected.
ERROR:cannotverifyxxx.xxx.xxx.xx'scertificate,issuedby`/C=JP/ST=oosaka/L=oosaka/O=oosaka/OU=oosaka/CN=www.xxxx.com':
Self-signedcertificateencountered.
ERROR:certificatecommonname`www.xxxx.com'doesn'tmatchrequestedhostname`xxx.xxx.xxx.xx'.
Toconnecttoxxx.xxx.xxx.xxinsecurely,use`--no-check-certificate'.
UnabletoestablishSSLconnection.
在使用命令wget--no-check-certificatehttps://xxx.xxx.xxx.xx/訪問,得到頁面內容。
到這一步可以確定,服務器本身的443端口是開放的,只是從外部無法通過443端口訪問服務器。
那么,問題可能是,服務器的網絡環境中,防火墻的配置里沒有對外開放服務器這臺機子的443端口。
解決問題的話需要需要服務器網絡管理人員配合。