很多地方都有免费的SSL证书,闲着没事,发挥折腾帝的功力搞了几个证书,现在用的Linux配置起来很简单,但万一以后放弃Linux的话,在Win上就会很郁闷。
在IIS 8(对应的系统是Windows Server 2012)以前的版本是不能一台服务器绑定多个证书的,网上流传的修改配置文件加入主机头的方法根本不行,不论windows 2003还是2008 R2都不行,除非用的是通配符证书,但那样依然没什么实际意义,能用的起通配证书的人也不至于非要挤死在一个节点上。
而且我证实了另一点,一台服务器上配置多个IP,每个SSL站点独立IP的方法依然不行!网上流传的都是人云亦云瞎扯淡!
在IIS 8以前的版本里面,IIS的核心文件http.sys本身就不支持一个端口多个证书,难道网上这些人比微软还了解IIS?反正我不信,只能借助外力了。
今天折腾了一天总算搞定了。想了一下,大概有至少2个方案,今天写方案一。
下面是方法:
大体思路是这样,首先我测试通过了不同端口可以使用不同证书,然后用一个能够在Windows上支持多SSL站点的反向代理服务器来构成一个前端,这样就ok了。这样的体系下来,能选择的很少了,squid目前比较稳定的for windows版本是很多年前的,而且据说对SSL支持比较鸡肋,我就没敢瞎忙活,然后nginx本身就不怎么样,for windows的版本很垃圾,目前我能想到的就是apache了。
但是这里我依然要吐槽!网上流传的windows+apache进行ssl反向代理的文章,几乎100%都是错的,按那些去搞永远无法运行,害得我白忙活了几个小时。
下面写一下我的配置吧。
我这用的是apache 2.4,官网那几个链接下载回来的,系统环境通过的是win 7和win 2008 R2,理论上win 2003也可以的(但是需要下载vc11以前的编译版本),懒的测试了,因为2003和2008需要搞不同的apache,因为用vc 2015编译的apache无法运行在2003上。
首先加载几个模块:
LoadModule ssl_module modules/mod_ssl.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so #我估计这一行没用,也懒的测试了,反正开着吧 LoadModule headers_module modules/mod_headers.so Include conf/extra/httpd-ssl.conf
然后记得把Listen 80注释掉,因为只打算用apache来做个ssl代理,如果不关掉80的话,会跟iis冲突。
然后打开iis管理器,导入需要的证书,给每个站点绑一个不同的ssl端口,证书选择对应的。我这里old.tingtao.org绑的是102端口,www.tingtao.org绑的是103端口。
apache的虚拟主机配置:
#听涛 SSL <VirtualHost *:443> ServerName tingtao.org ServerAlias old.tingtao.org SSLEngine on SSLCertificateFile c:\web\ca\old.tingtao.org\old.tingtao.org.crt SSLCertificateKeyFile c:\web\ca\old.tingtao.org\2_old.tingtao.org.key SSLCertificateChainFile c:\web\ca\old.tingtao.org\old.tingtao.org_ca.crt RequestHeader set Front-End-Https "On" <IfModule mod_ssl.c> SSLProxyEngine On ProxyRequests Off ProxyPreserveHost On ProxyPass / https://127.0.0.1:102/ ProxyPassReverse / https://127.0.0.1:102/ </IfModule> </VirtualHost> #听涛 IT SSL <VirtualHost *:443> ServerName www.tingtao.org SSLEngine on SSLCertificateFile c:\web\ca\www.tingtao.org\www.tingtao.org.crt SSLCertificateKeyFile c:\web\ca\www.tingtao.org\2_www.tingtao.org.key SSLCertificateChainFile c:\web\ca\www.tingtao.org\www.tingtao.org_ca.crt RequestHeader set Front-End-Https "On" <IfModule mod_ssl.c> SSLProxyEngine On ProxyRequests Off ProxyPreserveHost On ProxyPass / https://127.0.0.1:103/ ProxyPassReverse / https://127.0.0.1:103/ </IfModule> </VirtualHost>
里面证书路径和端口什么的自己做对应修改就可以了。启动apache,一切就ok了。
补充:
很多朋友索要配置文件,干脆贴出来吧,其中有些模块什么的按道理说并不必须,但我有其他用途,所以没再测试了,下面的配置可以正常运行,但如果有些模块各位用不上的话,可以自行测试并屏蔽之:
虚拟主机的配置上文中已有,就不必再发了。
路径么,我这的apache目录是c:\service\apache,可能各位需要对应修改;我用的版本是2.4.x(小版本号忘记了),配置文件与32/64位无关,同时应该所有2.4这个大版本都可以用下面这个配置文件的。
源文件下载:httpd.conf httpd-vhosts.conf
去掉注释的httpd.conf :
ServerRoot "c:/Service/apache" ServerTokens Prod LoadModule access_compat_module modules/mod_access_compat.so LoadModule actions_module modules/mod_actions.so LoadModule alias_module modules/mod_alias.so LoadModule allowmethods_module modules/mod_allowmethods.so LoadModule asis_module modules/mod_asis.so LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule authn_core_module modules/mod_authn_core.so LoadModule authn_file_module modules/mod_authn_file.so LoadModule authz_core_module modules/mod_authz_core.so LoadModule authz_groupfile_module modules/mod_authz_groupfile.so LoadModule authz_host_module modules/mod_authz_host.so LoadModule authz_user_module modules/mod_authz_user.so LoadModule autoindex_module modules/mod_autoindex.so LoadModule cgi_module modules/mod_cgi.so LoadModule deflate_module modules/mod_deflate.so LoadModule dir_module modules/mod_dir.so LoadModule env_module modules/mod_env.so LoadModule headers_module modules/mod_headers.so LoadModule include_module modules/mod_include.so LoadModule isapi_module modules/mod_isapi.so LoadModule log_config_module modules/mod_log_config.so LoadModule mime_module modules/mod_mime.so LoadModule negotiation_module modules/mod_negotiation.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule rewrite_module modules/mod_rewrite.so LoadModule setenvif_module modules/mod_setenvif.so LoadModule ssl_module modules/mod_ssl.so LoadModule bw_module modules/mod_bw.so <IfModule mod_watch.c> <Location /watch-info> SetHandler watch-info </Location> <LocationMatch "^/~.+/watch-info$"> SetHandler watch-info </LocationMatch> <Location /watch-list> SetHandler watch-list </Location> <Location /watch-table> SetHandler watch-table </Location> <Location /watch-flush> SetHandler watch-flush </Location> WatchStateDirectory C:/Service/apache/watch </IfModule> <IfModule unixd_module> User daemon Group daemon </IfModule> ServerAdmin admin@example.com ServerName localhost <Directory /> </Directory> DocumentRoot "C:/Service/apache/htdocs" <Directory "C:/Service/apache/htdocs"> Options FollowSymLinks AllowOverride All Require all granted </Directory> <IfModule dir_module> DirectoryIndex index.html index.htm index.php </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "logs/error.log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access.log" common </IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "C:/Service/apache/cgi-bin/" </IfModule> <IfModule cgid_module> </IfModule> <Directory "C:/Service/apache/cgi-bin"> AllowOverride None Options None Require all granted </Directory> <IfModule mime_module> TypesConfig conf/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz </IfModule> Include conf/extra/httpd-mpm.conf Include conf/extra/httpd-vhosts.conf <IfModule proxy_html_module> Include conf/extra/proxy-html.conf </IfModule> Include conf/extra/httpd-ssl.conf <IfModule ssl_module> SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule>
麻烦再发一下配置文件,谢谢
放在文中了
开始完善这里 http://www.tingtao.org/server-template
想问一下,为什么在windows server 2008 r2上安装了apache2.4,不引用Include conf/extra/httpd-ssl.conf就不会报错,一引用就无法启动apache,请问有什么需要修改的吗?
出错可能性有很多,要看具体报错内容的
按你说的,很简单就实现,实际是不是还有很多基础配置?
开启SSL之后就报下列错误,解决完下列错误又有其它错误,不知道是否有很多基础要配置?
The Apache service named reported the following error:
>>> SSLCertificateKeyFile: file 'C:/Apache24/conf/server.key' does not exist or is empty .
这个日志不完全,我估计后面说的是两种情况,要么这个证书文件不存在,要么证书文件错误。
我好像有个印象,默认配置的那个ssl站点好像有几个选项要屏蔽掉。
把我的给你,你照着修改吧。我记得是2.4.x的,理论上通用:
http://dl.35bl.com/tmp/tmp_apache.rar
临时文件,想起来就删了,从速下载.
包含默认站点和自己的虚拟主机站点
谢谢
https://127.0.0.1:103/ 是不是还要配一次证书?
是的
成功了,感谢!
请教一下,怎么配置文件
文中很详细