友声网

 找回密码
 立即注册
搜索
查看: 334|回复: 4
收起左侧

[Apache] Apache,Http与Https 的配置

[复制链接]
卡卡北 发表于 2018-1-31 14:17 | 显示全部楼层 |阅读模式
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参数:
  1. #加载模块mod_ssl.so,此模块是启用SSL功能必须的。
  2. LoadModule ssl_module modules/mod_ssl.so //静态编进apache内核的则不需要此段
  3. #监听443端口

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

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

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

  18. #说明主站是使用HTTP通信的,只有上面虚拟站点有SSL
  19. SSLEngine off                              
复制代码


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


 楼主| 卡卡北 发表于 2018-1-31 14:17 | 显示全部楼层
重新启动Apache
如果是在Linux下,输入:
  1. apachectl stop
  2. apachectl startssl
复制代码
Server a.test.com:443 (RSA)
Enter pass phrase://输入创建证书和密钥时的密码,正确输入后ssl就连同apache一起启动
在浏览器中输入:https://127.0.0.1
要求下载证书,OK~https建立就完成了

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

 楼主| 卡卡北 发表于 2018-1-31 14:18 | 显示全部楼层

客户端证书认证

(1)基本客户证书认证
强制客户对整个站点都必须采用客户证书认证的方式,可以在原来的配置下增加如下参数:
  1. <VirtualHost _default_:443>
  2. ......
  3. # 需要客户有一个客户端证书,并由ca.cer这个CA证书签署
  4. SSLVerifyClient require
  5. SSLVerifyDepth 1
  6. SSLCACertificateFile conf/ssl.crt/ca.cer
  7. </VirtualHost>
复制代码

(2)如果只要求对特定目录采用客户证书认证方式,其他目录都不需要客户端证书,则可以采用如下配置:
  1. <VirtualHost _default_:443>
  2. ......
  3. # 需要客户有一个客户端证书,并由ca.cer这个CA证书签署
  4. SSLVerifyClient none
  5. SSLCACertificateFile conf/ssl.crt/ca.crt
  6. <Location /secure/area>
  7. SSLVerifyClient require
  8. SSLVerifyDepth 1
  9. </Location>
  10. </VirtualHost>
复制代码
 楼主| 卡卡北 发表于 2018-1-31 14:18 | 显示全部楼层

强制HTTPS访问

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

如果要针对整个网站全部执行HTTP自动转为HTTPS的功能,可以在httpd.conf文件中,增加:
  1. RewriteEngine on
  2. RewriteCond   %{HTTPS} !=on
  3. RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]
复制代码

如果,仅要求对\secure目录下的内容强制采用HTTPS访问,可以在httpd.conf文件中加入如下语句:
  1. <Directory "C:\Program Files\htdocs\secure">
  2. RewriteEngine on
  3. RewriteCond   %{HTTPS} !=on
  4. RewriteRule   ^(.*)  https://%{SERVER_NAME}/secure/$1 [L,R]
  5. </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
  1. <Directory /usr/local/apache2/htdocs>
  2. # subarea以外的区域只允许来自Intranet的访问
  3. Order                deny,allow
  4. Deny                 from all
  5. Allow                from 192.168.1.0/24
  6. </Directory>
复制代码
  1. <Directory /usr/local/apache2/htdocs/subarea>
  2. # 在subarea以内,允许所有来自Intranet的访问,
  3. # 但对来自Internet的访问,仅允许HTTPS+Strong-Cipher+Password
  4. # 或者HTTPS+Strong-Cipher+Client-Certificate
  5. # 如果使用了HTTPS,则确保使用高强度加密
  6. # 同时允许客户以基本认证的形式认证
  7. SSLVerifyClient      optional
  8. SSLVerifyDepth       1
  9. SSLOptions           +FakeBasicAuth +StrictRequire
  10. SSLRequire           %{SSL_CIPHER_USEKEYSIZE} >= 128

  11. # 强制来自Internet的客户使用HTTPS
  12. RewriteEngine        on
  13. RewriteCond          %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
  14. RewriteCond          %{HTTPS} !=on
  15. RewriteRule          ^(.*)  https://%{SERVER_NAME}$1 [L,R]

  16. # 允许网络访问和基本认证
  17. Satisfy              any
  18. # 控制网络访问
  19. Order                deny,allow
  20. Deny                 from all
  21. Allow                192.168.1.0/24
  22. # HTTP基本认证
  23. AuthType             basic
  24. AuthName             "Protected Intranet Area"
  25. AuthBasicProvider    file
  26. AuthUserFile         conf/protected.passwd
  27. Require              valid-user
  28. </Directory>
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|RSS|联系|友声网 ( 鲁ICP备15020090号 ) 知道创宇云安全

GMT+8, 2019-6-20 21:18 , Processed in 0.053713 second(s), 19 queries , MemCache On.

Powered by Discuz! X

©2019 Comsenz Inc.

快速回复 返回顶部 返回列表