设为首页 收藏本站
查看: 1010|回复: 0

[经验分享] 构建SSL/TLS安全的基于域名的apache虚拟主机

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-11-27 12:23:32 | 显示全部楼层 |阅读模式
由于SSL协议的固有特性,apache下基于主机名的SSL虚拟主机一直不怎么好弄。
后来出了RFC3546标准中Server Name Indication(SNI)解决方案,终于有标准可循。问题是OpenSSL 0.9.8并不支持SNI(貌似0.9.8i支持),幸好还有mod_gnutls支持。

mod_gnutls基于gnutls, 与mod_ssl与openssl关系类似, 同样提供SSL和TLS的支持--起码在我眼中是一样的,不知道理解得对不对了。


要实现apache下基于主机名的安全虚拟主机,与下面的几方面知识内容有关:

1.apache下基于主机名的虚拟主机的配置
这个就不多说了,资料一抓大把。



2.gnutls和mod_gnutls安装
版本要求:
    Gnutls >= 2.4.0
    Apache httpd >= 2.15 (mod_gnutls主页的提示)
其实安装过程也没什么好说的,不外乎就是./configure和make && make install之类的,唯一要注意是,./configure时要注意缺少哪些包,然后下载安装相关的linux包。

比如RHEL5/CentOS5, 仓库中只有gnutls-1.4.1, 明显不符合要求,需要自行编译,这时就要安装httpd-devel等各个开发包以支持gnutls和mod_gnutls模块的编译了。 手工编译安装的mod_gnutls还要注意修改apache配置文件在443端口上进行监听。

对于debian lenny就方便得多,唯一要注意的是不要与mod_ssl一起用.
直接用下面的命令:
#a2dismod ssl
#apt-get install gnutls-bin libgnutls26 libapache2-mod-gnutls
#a2enmod gnutls
就能把需要的模块全部装好和配置好。




3.证书的创建
  debian: mkdir /etc/apache2/CA && cd /etc/apache2/CA
  RHEL:   mkdir /etc/httpd/CA && cd /etc/httpd/CA
SSL证书的创建也是比较复杂和繁琐的事,特别是对于我们这类对SSL/TLS并不是精通的人,幸好gnutls提供的工具和使用方法还是比较简单的:
1.创建CA的key(私钥)
  certtool --generate-privkey --outfile ca.key

2.创建CA的cert(证书)
  certtool --generate-self-signed \
           --load-privkey ca.key \
           --template ca.info \
           --outfile ca.cert
  注:
  --template ca.info指定了ca.info文件作为参数文件,可以避免交换过程回答程序的提问,内容和说明如下:(分隔线之间,实际使用时请自行去掉说明内容)
-----------------ca.info------------------
organization = "XXXXX Ltd."  //组织
unit = "XXXXX"               //组织单元
locality = "mycity"        //城市 --可选
state = "mystate"          //省份 --可选
country = CN               //国家 --可选
cn = "XXXX CA"             //通用名
ca                         //不要改
cert_signing_key           //不要改
expiration_days = 36500    //有效天数
-------------------------------------------

3.创建主机的key(私钥)
  certtool --generate-privkey --outfile www.HOSTNAME.com.key

4.创建主机的cert(证书)
  certtool --generate-certificate \
           --load-privkey www.HOSTNAME.com.key \
           --load-ca-certificate ca.cert \
           --load-ca-privkey ca.key \
           --template www.HOSTNAME.com.info \
           --outfile www.HOSTNAME.com.cert
  注:www.HOSTNAME.com.info意义同上,内容如下
--------www.HOSTNAME.com.info--------------
organization = "XXXX Ltd."
unit = "XXXXX"
cn = "www.HOSTNAME.com" //这里要与实际主机名一致,减少一个警告
tls_www_server
encryption_key
signing_key
expiration_days = 7300
-------------------------------------------

5.检验生成的cert证书文件
   certtool  -i --infile ca.cert
   certtool  -i --infile www.HOSTNAME.com.cert


注:上面3.4两步可以反复进行创建多个不同主机名的证书,用在虚拟主机配置中

4.配置apache
这里假设基于主机名的虚拟主机已配置好,以下面的配置示例:
NameVirtualHost *:443

        GnuTLSEnable on
        GnuTLSPriorities NORMAL
        GnuTLSCacheTimeout 300
        GnuTLSCertificateFile CA/www.HOSTNAME.com.cert
        GnuTLSKeyFile CA/www.HOSTNAME.com..key

        ServerAdmin webmaster@localhost
        ServerName www.HOSTNAME.com.
        DocumentRoot /var/www-sites/xxxxxxxxxxxx/



        GnuTLSEnable on
        GnuTLSPriorities NORMAL
        GnuTLSCacheTimeout 300
        GnuTLSCertificateFile CA/www.HOSTNAME2.com.cert
        GnuTLSKeyFile CA/www.HOSTNAME2.com..key

        ServerAdmin webmaster@localhost
        ServerName www.HOSTNAME2.com.
        DocumentRoot /var/www-sites/xxxxxxxxxxxx2/


如果有多个SSL主机, 则要配置多段VirtualHost内容,使用不同的cert和key


使用:
   因为是自签名证书,所以浏览器中仍然会提示"使用了无效的安全证书,该证书因为其发行者证书未知而不被信任"之类的错误信息,并要求浏览者确认后才继续浏览。
   要避免这个问题,可以购买商业认证(CA)或者寻找免费的第三方认证提供商发行的证书,然后重新生成主机的证书。
   事实上,虽然自签名证书有认证方面的问题,但完全不影响在通讯过程中的加密功能,起码企业内部是可以放心使用的。




参考资料:

gnutls主页
http://www.gnu.org/software/gnutls/

mod_gnutls主页
http://www.outoforder.cc/projects/apache/mod_gnutls/


这个比较清晰(关于证书创建)
http://vpsblog.rashost.com/blog/openssl-ca-cert

这个比较完整也清楚,可惜站点离线了
http://moya.iyard.org/bin/view/Technology/Mod_gnuTLS
访问google快照
http://203.208.37.132/search?q=cache:1LXApSXcJuYJ:moya.iyard.org/bin/view/Technology/Mod_gnuTLS+mod_gnutls+%E8%AF%81%E4%B9%A6&cd=3&hl=zh-CN&ct=clnk&gl=cn&client=firefox-a&st_usg=ALhdy2_dcSb3Irb-VGjKNpg36p05uatImA

这里对gnutls的使用说明比较详细,不过有点乱,备用参考吧
http://hi.baidu.com/tiger_tnt/blog/item/22605b246494f2054c088d07.html

这里对mod_gnutls的实例描述得比较清楚
http://www.itis.tw/node/851




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-640315-1-1.html 上篇帖子: apache泛域名配置+泛域名指向处理文件 下篇帖子: mac下apache+php+mysql环境配置#开发实战#
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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