Apache单站点配置https

Apache配置https

1.首先你得有ssl证书,没有的可以去购买,买完之后下载证书,建议选择适配Apache的文件下载。我的下载下来的文件是一个压缩文件,解压后截图如下:

这三个文件分别是:
  一个以.key结尾的文件(秘钥文件)
  两个以.crt结尾的文件(xxxxx_chain.crt是证书链文件,xxxxx_public.crt是证书文件)

2.在Apache的目录下新建一个文件夹,名称随意。然后将这三个文件放到这个文件夹里面。我这边的文件夹名字是cert。

3.在Apache安装目录下,打开Apache/conf/httpd.conf,在httpd.conf文件中找到以下参数并进行配置。

#LoadModule ssl_module modules/mod_ssl.so #删除行首的配置语句注释符号“#”加载mod_ssl.so模块启用SSL服务,Apache默认是不启用该模块的。如果找不到该配置,请重新编译mod_ssl模块。
#Include conf/extra/httpd-ssl.conf #删除行首的配置语句注释符号“#”。

如果找不到上面的参数请在文章后面看解决办法。

4.保存httpd.conf文件并退出。
5.打开Apache/conf/extra/httpd-ssl.conf,在httpd-ssl.conf文件中找到以下参数并进行配置。 证书路径建议使用绝对路径。

SSLProtocol all -SSLv2 -SSLv3  # 添加SSL协议支持协议,去掉不安全的协议。
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM   # 使用此加密套件。
SSLHonorCipherOrder on
SSLCertificateFile cert/domain name_public.crt   # 将domain name_public.crt替换成您证书文件名。
SSLCertificateKeyFile cert/domain name.key   # 将domain name.key替换成您证书的秘钥文件名。
SSLCertificateChainFile cert/domain name_chain.crt  # 将domain name_chain.crt替换成您证书的秘钥文件名;证书链开头如果有#字符,请删除。

6.保存 httpd-ssl.conf 文件配置并退出。
7.重启Apache服务器使SSL配置生效。


这里说一下上面第3步找不到那些参数的解决办法:

1.找不到那些参数,可能是Apache没有安装mod_ssl.so模块,我这里用yum方式安装。在任意路径下执行下面的命令:

yum -y install mod_ssl

2.命令执行结束安装完成后 /etc/httpd/conf.d 目录下会出现一个ssl.conf文件

3.在这个文件里面找到如下内容进行更改

SSLCertificateFile xxx_public.crt

SSLCertificateKeyFile xxx.key

SSLCertificateChainFile xxx_chain.crt

4.找到上面的三个内容并将后面的文件路径替换为你自己的文件路径,(这些文件就是你之前放在Apache/cert路径下的三个证书文件且路径是绝对路径)

5.然后继续在此文件中配置找到以下内容配置443站点信息(这里只说明内容,按照内容直接改就可以)

DocumentRoot "/home/test/file/" #(引号里面是你的项目的路径)
ServerName xxxxx (这里的xxxxx是你的域名)

<Directory "/home/test/file/"> #(引号里面是你的项目的路径,其他的直接复制过去即可)
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>

6.然后这个文件就编辑完了。
7.在找到Apache/conf/httpd.conf文件并打开。
8.找到#LoadModule ssl_module modules/mod_ssl.so 并将前面的#号去掉。
9.在此文件的最后引入之前配置好的文件。例如:

#引入外部的ssl配置文件
Include /etc/httpd/conf.d/ssl.conf

10.至此,配置完成,重启Apache然后访问你的域名就好了。


Apache多域名配置ssl

1、修改http.conf
    (1)去掉 LoadModule ssl_module modules/mod_ssl.so 前的#号
    (2)找到#Include conf/extra/httpd-ssl.conf这句话,这里我们就不用自带的文件了,我是新建了个文件
2、找到#Include conf/extra/httpd-ssl.conf这句话,这里我们就不用自带的文件了,我是新建了个文件

3、新建这个文件

4、新建cert文件夹,将刚刚下载的证书文件(4个)放到这个文件里
      如果你要配置两个ssl,那再建一个文件夹放另一个证书的文件
      这里分别我建了api和certlzf两个文件夹

5、编辑vhosts-ssl.conf文件

到这里,重启apache,输入刚刚配置过得域名就完成了~

下面附上vhost-ssl.conf的代码

Listen 443
<VirtualHost *:443>
 DocumentRoot "这里改为你项目的绝对路径"
 ServerName 这里改为你要配置的域名
 ServerAlias 这里改为你要配置的域名
 SSLEngine on
 SSLProtocol TLSv1 TLSv1.1 TLSv1.2
 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
 SSLCertificateFile "这里改为你公钥的绝对路径"
 SSLCertificateKeyFile "这里改为你私钥的绝对路径"
 SSLCertificateChainFile "这里改为你证书链的绝对路径"
 <Directory "这里改为你项目的绝对路径">
 Options FollowSymLinks ExecCGI
 AllowOverride All
 Order allow,deny
 Allow from all
 Require all granted
 </Directory>
</VirtualHost>


<VirtualHost *:443>
 DocumentRoot "这里改为你项目的绝对路径
 ServerName 这里改为你要配置的域名
 ServerAlias 这里改为你要配置的域名
 SSLEngine on
 SSLProtocol TLSv1 TLSv1.1 TLSv1.2
 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
 SSLCertificateFile "这里改为你公钥的绝对路径"
 SSLCertificateKeyFile "这里改为你私钥的绝对路径"
 SSLCertificateChainFile "这里改为你证书链的绝对路径"
 <Directory "这里改为你项目的绝对路径">
 Options FollowSymLinks ExecCGI
 AllowOverride All
 Order allow,deny
 Allow from all
 Require all granted
 </Directory>
</VirtualHost>

安装 SSL 示例

把所有ssl都安装上

yum install *ssl* -y
# 原本http站点
<VirtualHost *:80>
    ProxyPreserveHost on
    ServerName jlzj8188.cn
    DocumentRoot "D:/XLJAPP/Projects/jlzj"
     <Files ~ "\.(exe|dll|mdb|dat)$">
        Order allow,deny
        Deny from all
    </Files>
    <Directory "D:/XLJAPP/Projects/jlzj">
        Order allow,deny
        Allow from all
    </Directory>
    Alias /g "D:/XLJAPP/G"
    Alias /G "D:/XLJAPP/G"
    <Directory "D:/XLJAPP/G">
        Order allow,deny
        Allow from all
    </Directory>
    ProxyPassMatch (?i)^/(f|g|bbs|min|ext|ext-3.4.0|files|temp) ! 
    ProxyPassMatch (?i)^/cache/[^\$]+$ !
    ProxyPassMatch (?i)^/[^/\.]+\.(exe|dll|mdb|dat|swf) !
    ProxyPass /weboffice_v6.0.5.0.cab !
    ProxyPass /webrunner_10806.exe !
    ProxyPass /index.php !

    RewriteEngine on
    RewriteRule ^/min/([a-z]=.*) /min/index.php?$1
    RewriteCond %{QUERY_STRING} !^(id|p|cache)= [NC]
    RewriteRule ^/$ /index.php [QSA,NC]
    RewriteRule ^/(index)\.(htm)(\?|$) /index.php$3 [QSA,P,NC]
    RewriteRule ^/([0-9a-zA-Z_\-]+)\.(htm)(\?|$) /index.php?id=$1$3 [QSA,P,NC]
    RewriteRule ^/([0-9a-zA-Z_\-]+)\.(html)(\?|$) /index.php?p=$1$3 [QSA,P,NC]
    RewriteRule ^/([0-9a-zA-Z_\-]+)\.id /?id=$1 [QSA,P,NC]

    ProxyPass / http://127.0.0.1:10806/  retry=0 smax=5 max=50 ttl=30 keepalive=on 
    ProxyPassReverse / http://127.0.0.1:10806/
    ErrorLog "logs/web/10806-error.log"
    CustomLog "logs/web/10806-access.log" common
</VirtualHost>


# 新的https 站点
<VirtualHost *:443>
    ProxyPreserveHost on
    ServerName jlzj8188.cn
    DocumentRoot "D:/XLJAPP/Projects/jlzj"
    SSLProtocol all -SSLv2 -SSLv3
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
    SSLHonorCipherOrder on
    SSLCertificateFile conf/ssl/2748215_jlzj8188.cn_public.crt
    SSLCertificateKeyFile conf/ssl/2748215_jlzj8188.cn.key
    SSLCertificateChainFile conf/ssl/2748215_jlzj8188.cn_chain.crt

     <Files ~ "\.(exe|dll|mdb|dat)$">
        Order allow,deny
        Deny from all
    </Files>
    <Directory "D:/XLJAPP/Projects/jlzj">
        Order allow,deny
        Allow from all
    </Directory>
    Alias /g "D:/XLJAPP/G"
    Alias /G "D:/XLJAPP/G"
    <Directory "D:/XLJAPP/G">
        Order allow,deny
        Allow from all
    </Directory>
    ProxyPassMatch (?i)^/(f|g|bbs|min|ext|ext-3.4.0|files|temp) ! 
    ProxyPassMatch (?i)^/cache/[^\$]+$ !
    ProxyPassMatch (?i)^/[^/\.]+\.(exe|dll|mdb|dat|swf) !
    ProxyPass /weboffice_v6.0.5.0.cab !
    ProxyPass /webrunner_10806.exe !
    ProxyPass /index.php !

    RewriteEngine on
    RewriteRule ^/min/([a-z]=.*) /min/index.php?$1
    RewriteCond %{QUERY_STRING} !^(id|p|cache)= [NC]
    RewriteRule ^/$ /index.php [QSA,NC]
    RewriteRule ^/(index)\.(htm)(\?|$) /index.php$3 [QSA,P,NC]
    RewriteRule ^/([0-9a-zA-Z_\-]+)\.(htm)(\?|$) /index.php?id=$1$3 [QSA,P,NC]
    RewriteRule ^/([0-9a-zA-Z_\-]+)\.(html)(\?|$) /index.php?p=$1$3 [QSA,P,NC]
    RewriteRule ^/([0-9a-zA-Z_\-]+)\.id /?id=$1 [QSA,P,NC]

    ProxyPass / http://127.0.0.1:10806/  retry=0 smax=5 max=50 ttl=30 keepalive=on 
    ProxyPassReverse / http://127.0.0.1:10806/
    ErrorLog "logs/web/10806-error.log"
    CustomLog "logs/web/10806-access.log" common
</VirtualHost>