1. 程式人生 > >Windows搭建Apache+SSL Https伺服器

Windows搭建Apache+SSL Https伺服器

因為看到網上的各種教程不全還有很多錯誤,自己繞了好多彎最後參考了官方文件,才最終解決,所以這裡綜合各方大神所寫的文章,改正和完善細節後再發一次。這裡不得不說一下,官方文件雖然是英文的平時還特別低調,顯得相當高冷,可是它卻是我們最靠譜,最堅強的後盾。

1.修改兩個配置檔案,一個為conf/httpd.conf,另一個為conf/extra/httpd-ssl.conf

在httpd.conf中
a. 刪掉以下語句前的’#’

#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-mpm.conf 
#Include conf/extra/httpd-ssl.conf 

b. httpd-ssl.conf中把相應選項改成如下,有’#’的刪掉

SSLCertificateFile "c:/Apache24/conf/server.crt"
SSLCertificateKeyFile "c:/Apache24/conf/server.key"
SSLCACertificateFile "c:/Apache24/conf/ca.crt"
SSLVerifyClient require
SSLVerifyDepth  1

2.生成各種證書
進入Apache24\bin目錄,在對應資料夾下開啟cmd
這裡需要一個openssl的配置檔案openssl.cnf,如果他不在 conf資料夾下,可以去網上下一個,建議把它放到bin目錄下,這樣子敲命令比較方便

a. 首先要生成伺服器端的私鑰(key檔案):

  set OPENSSL_CONF=openssl.cnf
  openssl genrsa -des3 -out server.key 1024

b. 生成server.csr ,Certificate Signing Request(CSR),生成的csr檔案交給CA簽名後形成服務端自己的證書.螢幕上將有提示,依照其指示一步一步輸入要求的個人資訊即可.

openssl req -new -key server.key -out server.csr -config openssl.cnf

c. 對客戶端也作同樣的命令生成key及csr檔案

openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr -config openssl.cnf

d. CSR檔案必須有CA的簽名才可形成證書.可將此檔案傳送到verisign等地方由它驗證,要交一大筆錢,何不自己做CA呢.

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

e. 在bin目錄下新建一個demoCA資料夾,進入它
新建newcerts資料夾,不需要進入
新建index.txt
新建serial,開啟後輸入01儲存即可

f. 用生成的CA的證書為剛才生成的server.csr,client.csr檔案簽名:

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

這裡如果第二條指令出現下面這樣的錯誤,進入demoCA,然後開啟index.txt.attr,把它修改成unique_subject = no就可以了
出錯資訊

g. 生成一個ca.pfx,開啟IE瀏覽器-》工具-》Internet選項-》內容-》證書,按照提示匯入,這裡要輸入剛才生成 .pfx 過程中輸入的密碼
openssl pkcs12 -export -in ca.crt -inkey ca.key -out ca.pfx.

以上操作生成了
client使用的檔案有:ca.crt,client.crt,client.key
server使用的檔案有:ca.crt,server.crt,server.key

把 ca.crt,server.crt,server.key複製到conf根目錄下去

開啟Apache Service Monitor ,點選重啟或者啟動,走你…..
然而並沒什麼卵用,apache爆炸了,可是我們並不需要報警,接下來我們將一步步解決這些錯誤,本人行走江湖多年,能力不高,所以錯誤百出,別的沒能耐,但是對於找錯誤,還是相當有一手的(此處捂著嘴笑),下面貼出logs/error.log的錯誤資訊

AH00558: httpd.exe: Could not reliably determine the server's fully qualified domain name, using fe80::9c8a:3195:d193:8d3c. Set the 'ServerName' directive globally to suppress this message

[Thu Dec 10 00:14:27.582189 2015] [ssl:warn] [pid 720:tid 596] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]

[Thu Dec 10 00:14:27.601215 2015] [mpm_winnt:notice] [pid 720:tid 596] AH00354: Child: Starting 150 worker threads.

[Thu Dec 10 00:14:40.857165 2015] [mpm_winnt:notice] [pid 3940:tid 672] AH00424: Parent: Received restart signal -- Restarting the server.

AH00526: Syntax error on line 92 of C:/Apache24/conf/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

[Thu Dec 10 00:14:42.861192 2015] [mpm_winnt:notice] [pid 720:tid 596] AH00364: Child: All worker threads have exited.

各種百度以後得到解決方案

1.Syntax error on line 92 of C:/Apache24/conf/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).

在httpd.conf中找到下面這句話
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
取消註釋(刪掉前面的"#"2.SSLPassPhraseDialog builtin is not supported on Win32(key file C:/Apache24/conf/server.key)

   這個是說Windows不支援加密金鑰,還記得生成server.key輸入的密碼嗎?沒錯就是它的鍋,我們現在取消掉它,cmd輸入

openssl rsa -in server.key -out server.key

把生成的server.key複製到conf目錄下覆蓋
然後開啟httpd-ssl.conf 找到SSLPassPhraseDialog  builtin 在前面加上#

然後再次點選apache上的啟動試試,然後就SSL走起了。
瀏覽器輸入https://127.0.0.1/index.php就可以觀望到自己的https站點了。

參考資料

http://httpd.apache.org/docs/2.4/ssl/

http://blog.csdn.net/decajes/article/details/41706739

http://blog.chinaunix.net/uid-20539097-id-64403.html

http://impradeep.com/apacheconfextrahttpd-ssl-conf-error/

http://m.blog.csdn.net/blog/kuixinpei/5739637

鳴謝

感謝樓上各位大神的幸苦探索

感謝 網易雲音樂 歌單《夜的鋼琴曲 Demo集》--石進 在我煩躁得彷彿萬千草泥馬奔騰而過以及想出門日狗的時候及時阻止了我。

感謝 網易雲音樂 《當你》--林俊杰 的深夜相伴