Apache配置HTTPS功能
阿新 • • 發佈:2018-12-30
apache配置https
一、yum 安裝openssl和openssl-devel,httpd-devel
二、生成證書(也可以從公司的證書頒發機構獲取):
#建立伺服器金鑰 openssl genrsa -des3 1024 > /usr/local/apache/conf/server.key # 從金鑰中刪除密碼(以避免系統啟動後被詢問口令) openssl rsa -in /usr/local/apache/conf/server.key > /usr/local/apache/conf/server2.key mv /usr/local/apache/conf/server2.key /usr/local/apache/conf/server.key #建立伺服器金鑰請求檔案 openssl req -new -key /usr/local/apache/conf/server.key -out /usr/local/apache/conf/server.csr 5>openssl x509 -in /usr/local/apache/conf/server.csr -out # 建立伺服器證書 /usr/local/apache/conf/server.crt -req -signkey /usr/local/apache/conf/server.key -days 365
三、修改Apache的配置檔案httpd.conf
開啟ssl模組,沒有這個模組就需要安裝依賴包:mod_ssl,安裝後就會在modules裡面找到:
LoadModule ssl_module modules/mod_ssl.so
引入ssl配置檔案,增加支援ssl:
Include conf/extra/httpd-ssl.conf(去掉行首的註釋)
- 啟動重定向(可選),使用使用者HTTP訪問自動重定向為HTTPS,直接在http.conf最後配置即可,在httpd.conf檔案尾加入如下內容:
RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]
四、修改加密檔案ssl.conf,通過yum安裝好的httpd,在conf.d目錄下面有ssl.conf配置檔案,我們需要在裡面配置一個VirtualHost和配置證書和金鑰:
LoadModule ssl_module modules/mod_ssl.so Listen 443 SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 SSLMutex default SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW:!RC4: <VirtualHost _default_:443> # 必須有一個虛擬主機,這樣才可以使用跳轉功能和使用443埠訪問 DocumentRoot "/home/store/webroot" Servername https://xxx.com/ ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLCertificateFile /etc/httpd/conf/cert/xxx.com.crt SSLCertificateKeyFile /etc/httpd/conf/cert/xxx.com.key </VirtualHost>
五、重啟Apache
service httpd restart
- 在瀏覽器輸入https://域名 或者 域名:443,如果兩個能正常訪問,表示https已經配置成功。
- 在瀏覽器輸入 域名,如果能夠正常跳轉到https連線上,那說明跳轉功能正常。
- 啟動apache 碰到下面問題:
Invalid command 'SSLPassPhraseDialog', perhaps misspelled or defined by a module not included in the server configuration
到apache的bin 目錄下面執行 ./httpd -l 看看有沒有mode_ssl.c,這個錯誤說明ssl模組安裝沒有成功。
解決辦法:
1、重新編譯apache,加上--enable-ssl --with-ssl引數
2、把ssl模組加入到已經編譯好的apache中
首先,使用 whereis openssl 命令獲取lib和include的路徑
[[email protected] /usr/local/apache/modules]# whereis openssl
openssl: /usr/bin/openssl /usr/lib/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz
然後 在apache 原始碼的modules/ssl資料夾下,使用命令/usr/sbin/apxs -i -a -D HAVE_OPENSSL=1 -I/usr/include/openssl/ -L/usr/lib/openssl/ -c *.c -lcrypto -lssl -ldl
(apxs需要安裝http-devel才有,雖然如此,我還是沒有編譯成功,於是就在其他已經編譯了這個模組的機器上拷貝mod_ssl.so到apache模組目錄/usr/local/apache/modules)