Windows上為Apache配置HTTPS


1. 安裝OpenSSL:

Windows下安裝的wamp64中的Apache內置的OpenSSL是32位的,因此如果服務器主機之前沒有額外安裝過OpenSSL的話,需要先安裝64位OpenSSL,安裝地址如下:

http://slproweb.com/products/Win32OpenSSL.html

選擇Win64 OpenSSL最新版本號的Light即可,安裝時有一步需要勾選"Copy DLLs to Windows System directory"

參考:https://stackoverflow.com/questions/40017498/cannot-load-modules-mod-ssl-so-into-server

注:本節可以解決錯誤日志中出現的問題:Cannot load modules/mod_ssl.so into server: The operating system cannot run %1.

2. 證書的申請或生成:

事實上SSL證書是可以自己給自己頒發的,如果只是測試HTTPS下的一些問題,完全可以自己自建Root CA。具體可參考:

http://www.barretlee.com/blog/2016/04/24/detail-about-ca-and-certs/

但是阿里雲有免費證書,因此上面的東西我也沒試過。

以阿里雲為例,通過域名可以免費申請到證書,包含四個文件:

並有如下安裝指導:

 

 

3. 安裝證書與常見問題:

配置conf/httpd.conf:

找到如下行並去掉#

#LoadModule ssl_module modules/mod_ssl.so

# Include conf/extra/httpd-ssl.conf

另外,要確認以下兩行至少有一行是去掉#的:

LoadModule socache_dbm_module modules/mod_socache_dbm.so

LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

 

配置conf/extra/httpd-ssl.conf

需要修改的關鍵行:

Listen 443

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4

SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4
 
SSLHonorCipherOrder on
 
SSLProtocol TLSv1 +TLSv1.1 +TLSv1.2

SSLProxyProtocol all -SSLv3
 
SSLPassPhraseDialog  builtin
 
SSLSessionCache  dbm:d:/wamp64/bin/apache/apache2.4.23/logs/ssl_scache"

#SSLSessionCache "shmcb:d:/wamp64/bin/apache/apache2.4.23/logs/ssl_scache(512000)"

SSLSessionCacheTimeout  300
 
<VirtualHost _default_:443>
 
DocumentRoot "d:/wamp64/www"
ServerName tryservice.*******.com:443
#ServerAdmin admin@tryservice.*******.com
ErrorLog "d:/wamp64/logs/apache/apache_error.log"
TransferLog "d:/wamp64/logs/apache/access.log"
 
SSLEngine on
 
SSLCertificateFile "d:/wamp64/cert/tryservice/public.pem"
SSLCertificateKeyFile "d:/wamp64/cert/tryservice/214************.key"
SSLCertificateChainFile "d:/wamp64/cert/tryservice/chain.pem"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
##
<Directory "d:/wamp64/bin/apache/apache2.4.23/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
##
 
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
 
CustomLog "d:/wamp64/logs/apache/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>                                 

 

  

注意: 

SSLSessionCache 二者取一即可,與httpd.conf中一致,如果一個導致重啟Apache失敗,可以試試另一個;

涉及到日志位置、證書位置,盡量使用物理路徑(要加引號),使用相對位置很容易錯誤;

DocumentRoot, ServerName, ServerAdmin,一般來說應該與httpd.conf一致,但是要靈活處理,與證書的域名以及該域名對應網站的根目錄對應起來。

4. 確認80端口與443端口沒有被占用:

命令行輸入命令:

netstat -aon|findstr "80"

得到輸出:TCP    127.0.0.1:80        0.0.0.0:0              LISTENING      2448

說明80端口被進程號為2448的進程占用。同理可找到443是否被進程占用。

輸入命令:

tasklist|findstr "2448"

可以查看該進程的具體信息,如果太多找不到,可以去任務管理器的進程選項卡找到該進程。若被一般進程占用可直接結束進程接觸占用。若是SYSTEM占用,請參考以下解決方式。

80端口如果被SYSTEM占用,一般來說原因是開啟了IIS服務,把默認網站刪除或者更改端口即可解除占用;443端口被SYSTEM占用,打開任務管理器,在服務選項卡中找到RemoteAccess,停止服務即可解除占用(注意等正常啟動Apache后再手動啟動服務)。

 

 

注:本節可以解決錯誤日志中出現問題:

(OS 10013)以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。 : AH00072: make_sock: could not bind to address 127.0.0.1:80

(OS 10013)以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。 : AH00072: make_sock: could not bind to address 127.0.0.1:443

 

5. 重啟Apache:

此時重啟Apache,一般來說可以正常啟動了。如果仍然無法啟動,在任務管理器中的服務選項卡中找到以下兩個服務:wampmysqld64, wampapache64

 

 

若是wampmysqld64沒有運行,一般來說是因為服務器的MySQL服務在運行占用,在服務選項卡中找到MySQL服務停止,再重啟Apache即可;

若是wampapache64沒有運行,說明配置文件仍然有問題,首先停止Apache服務,在目錄 ” D:\wamp64\bin\apache\apache2.4.23\bin” 中打開命令行,運行httpd命令,即可查看系統錯誤日志,針對問題解決。

 

6. 虛擬服務器的SSL配置:

配置conf/extra/httpd-vhosts.conf

<VirtualHost *:80>
ServerName tryservice.*******.com
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:4050/
ProxyPassReverse / http://127.0.0.1:4050/
</VirtualHost>
 
<VirtualHost *:443>
ServerName tryservice.*******.com
SSLEngine on
SSLProxyEngine on
SSLCertificateFile "d:/wamp64/cert/tryservice/public.pem"
SSLCertificateKeyFile "d:/wamp64/cert/tryservice/214************.key"
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:4050/
ProxyPassReverse / http://127.0.0.1:4050/
</VirtualHost>

  


虛擬服務器的SSL配置,要根據上面的*80加上后面的*443,同樣注意域名與其證書一一對應。 

 

7. 在同一服務器上為多個域名部署不同的證書:

配置conf/extra/httpd-ssl.conf

Listen 443

##不需要更改
 
<VirtualHost _default_:443>

##不需要更改

</VirtualHost>                                 
 
#需要增加的域名配置:
<VirtualHost *:443>
 
#   General setup for the virtual host
DocumentRoot "d:/wamp64/www2"
ServerName trydoctor.*******.com:443
#ServerAdmin admin@tryservice.*******.com
ErrorLog "d:/wamp64/logs/apache/apache_error.log"
TransferLog "d:/wamp64/logs/apache/access.log"
 
SSLEngine on
 
SSLCertificateFile "d:/wamp64/cert/trydoctor/public.pem"
SSLCertificateKeyFile "d:/wamp64/cert/trydoctor/214************.key"
SSLCertificateChainFile "d:/wamp64/cert/trydoctor/chain.pem"
 
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "d:/wamp64/bin/apache/apache2.4.23/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
 
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
 
CustomLog "d:/wamp64/logs/apache/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 
</VirtualHost>                                 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM