卡卡北 发表于 2018-1-31 14:17

Apache,Http与Https 的配置

Apache开启SSL的方法:

修改httpd.conf文件
Apache一般有2个版本下载,一个是带SSL模块的,一个是不带SSL的,请首先检查自己的SSL是包含了SSL模块的,否则就没法做了。 Apache的参数配置都在httpd.conf文件中,SSL配置也是如此,此外还可以通过include httpd-ssl.conf来包含一个专门配置SSL的配置文件,如果激活了httpd-include ssl.conf,则可以打开httpd-ssl.conf来配置相应参数。

一般,我们直接在httpd.conf文件中直接配置SSL参数:
#加载模块mod_ssl.so,此模块是启用SSL功能必须的。
LoadModule ssl_module modules/mod_ssl.so //静态编进apache内核的则不需要此段
#监听443端口

#建立一个SSL的虚拟站点,避免SSL配置影响原来HTTP的站点配置
<VirtualHost _default_:443>
DocumentRoot "C:/Program Files/Apache2/htdocs"
ServerName www.myssl.cn:443
SSLEngine on
#SSLCertificateFile /opt/apache2/conf/ssl.crt/server.crt#108行
SSLCertificateFile /opt/apache2/conf/ssl.key/server.crt

#SSLCertificateFile /opt/apache2/conf/ssl.crt/server-dsa.crt
SSLCertificateKeyFile /opt/apache2/conf/ssl.key/server.key   #116行

#SSLCertificateKeyFile /opt/apache2/conf/ssl.key/server-dsa.key
#SSLCertificateChainFile "C:/SSL/chain.cer"
ErrorLog "C:/Program Files/Apache2/logs/error.log"
TransferLog "C:/Program Files/Apache2/logs/access.log"
</VirtualHost>

#说明主站是使用HTTP通信的,只有上面虚拟站点有SSL
SSLEngine off                              

配置参数说明如下(完整的SSL配置参数见这里):
    * Listen 443:
      SSL协议监听的端口,同下面 Virtualhost 中的端口需要匹配,SSL协议缺省使用443端口,也有使用8443的情况。
    * SSLEngine on:
      SSL功能打开,如果在Virtualhost 出现这句,则仅作用于虚拟机站点配置范围,这个虚拟机站点全部使用SSL通信,如果出现在Virtualhost外,则作用于全局,整个服务器都使用 SSL(HTTPS)通信,不能采用HTTP通信,所以通常都在Virtualhost中加这句。
    * SSLCertificateFile:证书文件,server.crt
    * SSLCertificateKeyFile:私钥文件,server.key
    * SSLCertificateChainFile:证书链文件,GeoTrust证书除了EV以外,都是单根证书,都不需要配置这个参数,如果是EV
                                          证书,则需要加入EV的证书链。
    * Errorlog,TranksferLog:日志文件
    * SSLEngine off:整个站点,除了虚拟站点外,关闭SSL,仍然支持HTTP通信

卡卡北 发表于 2018-1-31 14:17

重新启动Apache
如果是在Linux下,输入:
apachectl stop
apachectl startsslServer a.test.com:443 (RSA)
Enter pass phrase://输入创建证书和密钥时的密码,正确输入后ssl就连同apache一起启动
在浏览器中输入:https://127.0.0.1
要求下载证书,OK~https建立就完成了

注意:可以去掉每次启动时要输入证书私钥的 pass phrase
#cp server1.keyserver1.key.secure
#/usr/bin/openssl rsa -in aserver1.key.secure-out server1.key

卡卡北 发表于 2018-1-31 14:18

客户端证书认证

(1)基本客户证书认证
强制客户对整个站点都必须采用客户证书认证的方式,可以在原来的配置下增加如下参数:
<VirtualHost _default_:443>
......
# 需要客户有一个客户端证书,并由ca.cer这个CA证书签署
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile conf/ssl.crt/ca.cer
</VirtualHost>
(2)如果只要求对特定目录采用客户证书认证方式,其他目录都不需要客户端证书,则可以采用如下配置:
<VirtualHost _default_:443>
......
# 需要客户有一个客户端证书,并由ca.cer这个CA证书签署
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
</VirtualHost>

卡卡北 发表于 2018-1-31 14:18

强制HTTPS访问

强制HTTPS访问,主要通过将用户访问的HTTP请求自动转换为HTTPS请求,有两种方式:一种是通过编程的方式,详见:"强制用户通过SSL访问网站" ; 另一种方式则是通过Apache强大的Rewrite功能。

如果要针对整个网站全部执行HTTP自动转为HTTPS的功能,可以在httpd.conf文件中,增加:
RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)https://%{SERVER_NAME}$1
如果,仅要求对\secure目录下的内容强制采用HTTPS访问,可以在httpd.conf文件中加入如下语句:
<Directory "C:\Program Files\htdocs\secure">
RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)https://%{SERVER_NAME}/secure/$1
</Directory>

卡卡北 发表于 2018-1-31 14:18

如何对来自Internet并要访问Intranet的客户强制采用强加密的HTTPS通信,并采用基本或者客户证书的认证方式?同时还要确保来自 Intranet的客户可以进行HTTP访问?
假设IntranetIP地址段是192.160.1.0/24,Intranet站点子区域的URL是/subarea ,则可以在HTTPS虚拟主机站点以外增加如下配置(这样可以同时作用于HTTPS和HTTP):
SSLCACertificateFile conf/ssl.crt/company-ca.crt
<Directory /usr/local/apache2/htdocs>
# subarea以外的区域只允许来自Intranet的访问
Order                deny,allow
Deny               from all
Allow                from 192.168.1.0/24
</Directory>
<Directory /usr/local/apache2/htdocs/subarea>
# 在subarea以内,允许所有来自Intranet的访问,
# 但对来自Internet的访问,仅允许HTTPS+Strong-Cipher+Password
# 或者HTTPS+Strong-Cipher+Client-Certificate
# 如果使用了HTTPS,则确保使用高强度加密
# 同时允许客户以基本认证的形式认证
SSLVerifyClient      optional
SSLVerifyDepth       1
SSLOptions         +FakeBasicAuth +StrictRequire
SSLRequire         %{SSL_CIPHER_USEKEYSIZE} >= 128

# 强制来自Internet的客户使用HTTPS
RewriteEngine      on
RewriteCond          %{REMOTE_ADDR} !^192\.168\.1\.+$
RewriteCond          %{HTTPS} !=on
RewriteRule          ^(.*)https://%{SERVER_NAME}$1

# 允许网络访问和基本认证
Satisfy            any
# 控制网络访问
Order                deny,allow
Deny               from all
Allow                192.168.1.0/24
# HTTP基本认证
AuthType             basic
AuthName             "Protected Intranet Area"
AuthBasicProvider    file
AuthUserFile         conf/protected.passwd
Require            valid-user
</Directory>
页: [1]
查看完整版本: Apache,Http与Https 的配置