站长资源
中国站长网站

windows以及linux下配置apache+https协议

linux下

一、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的路径

[root@robot /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)

windows下

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/

但是阿里云有免费证书,因此上面的东西我也没试过。

以阿里云为例,通过域名可以免费申请到证书,包含四个文件:

windows以及linux下配置apache+https协议

并有如下安装指导:

windows以及linux下配置apache+https协议

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后再手动启动服务)。

windows以及linux下配置apache+https协议

注:本节可以解决错误日志中出现问题:

(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

windows以及linux下配置apache+https协议

若是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>                  

本文出处:来自互联网信息共享,请勿相信收费信息站长资源 » windows以及linux下配置apache+https协议

评论 抢沙发

评论前必须登录!