windows下apache+https環境配置
1、修改配置文件conf/httpd.conf,去掉以下語句注釋符號‘#’:

修改配置文件conf/extra/httpd-ssl.conf,把相應的選項改成如下:

2、配置php(php-5.6.30)
將php路徑加入系統環境變量:
右擊計算機 -> 屬性 -> 高級系統設置 -> 高級 -> 環境變量 -> 用戶變量 -> 新建環境變量。
變量名:PHP_HOME
變量值:D:\wamp\php-5.6.30
3、生成證書
3.1 cmd進入命令行模式,切換至apache的bin目錄:cd D:\wamp\httpd-2.4.25\bin;
3.2 設置OPENSSL_CONFIG配置,執行命令:set OPENSSL_CONF=../conf/openssl.cnf
3.3 首先要生成服務端的私鑰(key文件):openssl genrsa -des3 -out server.key 1024
3.4 生成server.csr,Certificate Signing Request(CSR),生成的csr文件交給CA簽名后形成服務端自己的證書。屏幕上將有提示,依照其提示一步一步輸入要求的個人信息即可。
openssl req -new -key server.key -out server.csr -config ../conf/openssl.cnf
3.5 對客戶端也用同樣的命令生成key及csr文件
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr -config ../conf/openssl.cnf
3.6 CSR文件必須有CA的簽名才可形成證書。可將此文件發送到verisign等地方由它驗證,要交一大筆錢,何不自己做CA呢。
openssl req -new -x509 -keyout ca.key -out ca.crt -config ../conf/openssl.cnf
3.7 在bin目錄下新建一個demoCA文件夾,進入它
新建newcerts文件夾,不需要進入
新建index.txt
新建serial,打開后輸入01保存即可
3.8 用生成的CA的證書為剛剛生成的server.csr,client.csr文件簽名:
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ../conf/openssl.cnf
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config ../conf/openssl.cnf
注:如果指令出現如下錯誤,進入demoCA,然后打開index.txt.attr,把unique_subject=no即可。

3.9 生成一個ca.pfx:
openssl pkcs12 -export -in ca.crt -inkey ca.key -out ca.pfx
3.10 導入證書
打開IE瀏覽器 -> 工具 -> Internet選項 -> 內容 -> 證書,按照提示導入ca.pfx,這里要輸入剛才生成ca.pfx過程中輸入的密碼。
3.11 以上操作生成了
client使用的文件有: ca.crt, client.crt, client.key
server使用的文件有:ca.crt, server.crt, server.key
把ca.crt, server.crt, server.key復制到conf目錄下去。
3.12 重啟apache,訪問https://127.0.0.1/index.php
3.15 如果出現以下錯誤
Starting the 'Apache2.4' service
The 'Apache2.4' service is running.
sl:emerg] [pid 8200:tid 500] AH02577: Init: SSLPassPhraseDialog builtin is not supported on Win32 (key file D:/wamp/httpd-2.4.25/conf/server.key)
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] AH02311: Fatal error initialising mod_ssl, exiting. See D:/wamp/httpd-2.4.25/logs/error.log for more information
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] AH02564: Failed to configure encrypted (?) private key example:1443:0, check D:/wamp/httpd-2.4.25/conf/server.key
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] SSL Library Error: error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Type=RSA)
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] SSL Library Error: error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] SSL Library Error: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Tue Mar 14 16:37:57.740113 2017] [ssl:emerg] [pid 8200:tid 500] SSL Library Error: error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error (Type=PKCS8_PRIV_KEY_INFO)
AH00016: Configuration Failed
這就是說windows不支持加密密鑰,還記得生成server.key輸入的密碼嗎?就是這個地方的錯誤,現在取消它。
openssl rsa -in server.key -out server.key
把生成的server.key復制到conf目錄下覆蓋原來的。
5.參考資料
http://blog.csdn.net/wlmnzf/article/details/50244409
http://blog.csdn.net/decajes/article/details/41706739
windows下配置apache+https
1. 修改conf/httpd.conf
取消ssl及proxy相關注釋
#LoadModule ssl_module modules/mod_ssl.so (去掉前面的#號)
#Include conf/extra/httpd-ssl.conf (去掉前面的#號)
#LoadModule proxy_module modules/mod_proxy.so (去掉前面的#號)
#LoadModule proxy_http_module modules/mod_proxy_http.so (去掉前面的#號)
2. 生成證書
cmd進入命令行,進入apache安裝目錄的bin目錄。
2.1 設置OPENSSL_CONFIG配置
執行命令:set OPENSSL_CONF=..\conf\openssl.cnf
2.2 生成服務端的key文件
執行命令:openssl genrsa -out server.key 1024
完成后,會在bin目錄下生成server.key文件
2.3 生成簽署申請
執行命令:openssl req -new -out server.csr -key server.key
完成后,會在bin目錄下生成server.csr文件,其中 Common Name <eg,YOUR name>[] 需要與配置文件中的ServerName一致,否則apache啟動時將會報錯。
2.4 生成CA的key文件
執行命令:openssl genrsa -out ca.key 1024
完成后,會在目錄bin下生成ca.key文件
2.5 生成CA自簽署證書
執行命令:openssl req -new -x509 -days 365 -key ca.key -out ca.crt
完成后,會在目錄bin下生成ca.crt文件,此處填寫的信息與2.3步中類似。
2.6 生成CA的服務器簽署證書
執行命令:openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
此處如果沒有創建好相關目錄,將會報如下錯誤:![]()
根據提示,手動創建相關目錄:在bin下新建demoCA文件夾bin/demoCA在demoCA下新建index.txtbin/demoCA/index.txt在demoCA下新建serial.txt,其內容為01,重命名刪除.txt后綴bin/demoCA/serial在demoCA下新建newcert文件夾bin/demoCA/newcerts完成后,會在bin目錄下生成server.crt文件。demoCA目錄的最終結構如下:![]()
3. 修改conf/extra/httpd-ssl.conf文件
3.1 修改https端口號
根據需要修改httpd-ssl.conf的默認端口號"443",這里將所有的443修改為"6443",同時修改ServerName。
具體如下:Listen 6443<VirtualHost _default_:6443>ServerName localhost提示:此處如果保持https默認的443端口,則訪問的時候,無需再加端口號。
3.2 修改相關證書路徑
在apache安裝目錄的conf目錄下,新建一個key目錄,名稱隨意,然后將bin目錄中的相關證書復制到key目錄中。key目錄最終的文件結構如下:
接着修改conf/extra/httpd-ssl.conf文件中的如下內容:SSLCertificateFile "xxx/conf/key/server.crt"SSLCertificateKeyFile "xxx/conf/key/server.key"SSLCACertificateFile "xxx/conf/key/ca.crt"#SSLVerifyClient require (去掉前面的#號,進行客戶端驗證時需要)#SSLVerifyDepth 1 (去掉前面的#號,把10改為1,進行客戶端驗證時需要)
4. 重啟apache
在瀏覽器中,輸入https://localhost:6443,如果頁面出現提示 It works! ,則說明https配置成功了。如圖:
5. 項目部署方式
5.1 以https的方式部署項目
-
<VirtualHost *:6443>
-
ServerName localhost
-
DocumentRoot D:/javapro/bms
-
SSLEngine on
-
SSLProxyEngine on
-
SSLCertificateFile "D:/myplatform/Apache2.2/conf/key/server.crt"
-
SSLCertificateKeyFile "D:/myplatform/Apache2.2/conf/key/server.key"
-
<Directory "/">
-
Options None
-
AllowOverride All
-
Order allow,deny
-
Allow From All
-
</Directory>
-
</VirtualHost>
5.2 以反向代理的方式部署項目
5.2.1 以二級目錄的方式部署反向代理
-
<VirtualHost *:80>
-
ServerName local.bms
-
DocumentRoot "D:/javapro/bms"
-
Alias /bms "D:/javapro/bms"
-
<Directory "/">
-
Options None
-
AllowOverride All
-
Order allow,deny
-
Allow From All
-
</Directory>
-
</VirtualHost>
-
<VirtualHost *:6443>
-
ServerName localhost
-
SSLEngine on
-
SSLProxyEngine on
-
SSLCertificateFile "D:/myplatform/Apache2.2/conf/key/server.crt"
-
SSLCertificateKeyFile "D:/myplatform/Apache2.2/conf/key/server.key"
-
ProxyRequests Off
-
<Proxy *>
-
Order allow,deny
-
Allow from all
-
</Proxy>
-
ProxyPass /bms http://local.bms/bms
-
ProxyPassReverse /bms http://local.bms/bms
-
</VirtualHost>
5.2.2 以一級目錄的方式部署反向代理
-
<VirtualHost *:80>
-
ServerName local.bms
-
DocumentRoot "D:/javapro/bms"
-
<Directory "/">
-
Options None
-
AllowOverride All
-
Order allow,deny
-
Allow From All
-
</Directory>
-
</VirtualHost>
-
<VirtualHost *:6443>
-
ServerName localhost
-
SSLEngine on
-
SSLProxyEngine on
-
SSLCertificateFile "D:/myplatform/Apache2.2/conf/key/server.crt"
-
SSLCertificateKeyFile "D:/myplatform/Apache2.2/conf/key/server.key"
-
ProxyRequests Off
-
<Proxy *>
-
Order allow,deny
-
Allow from all
-
</Proxy>
-
ProxyPass / http://local.bms/
-
ProxyPassReverse / http://local.bms/
-
</VirtualHost>

