基于域名的虚拟主机SSL配置

1、Server Name Indication(服务器名称指示)

以前一直听说基于域名的虚拟主机上只能使用同一张证书以配置SSL,其他域名会提示证书错误,或者去购买昂贵的多域名证书,直到无意中看到linode的文章:

服务器名称指示(Server Name Indication 简称 SNI)是一个扩展的TLS计算机联网协议,这允许在握手过程开始时通过客户端告诉正在连接的服务器的主机名称。允许在相同的IP地址和TCP端口号的服务器上使用多个证书,而不必所有网站都使用同一个证书。在概念上等同于HTTP/1.1基于域名的虚拟主机,只不过这是在HTTPS上实现的。

直接上设置:

1、编辑openssl.cnf(Debian 和 Ubuntu系统可以在/usr/lib/ssl/openssl.cnf找到),在HOME条目前加入
SAN="email:support@yoursite.org" 
修改yoursite.org以匹配你的域名

2、在[ v3_req ][ v3_ca ]节后面加上 
subjectAltName=${ENV::SAN} 
该语句指示OpenSSL,如果电子邮件地址默认支持的SSL证书没有提供其它的替代名称,环境变量“SAN”将被读取,以获得应视为有效新证书备用DNS名称的列表。(拗口)

3、服务器shell提示符下输入 

export SAN="DNS:www.firstsite.org, DNS:firstsite.org, DNS:www.secondsite.org, DNS:secondsite.org" 
声明你希望的证书中包含的域名,为方便起见,这里包括每个站点基础域(这样可以防止用户不输入“www”的部分,否则将发生错误)。
4、
apt-get update 
apt-get upgrade 
apt-get install openssl 
mkdir /etc/ssl/localcerts

#发出以下命令生成证书本身。请注意,此命令应该在一行上发出 
openssl req -new -x509 -sha256 -days 365 -nodes -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key

#生成证书请求文件
openssl req -new -key /etc/ssl/localcerts/apache.key -out /etc/ssl/localcerts/apache.csr

#不建议输入密码,否则apache启动时会让输入密码,比较麻烦,当然也可以搞定。
5、访问https://startssl.com/ 依次进行域名认证(Validations Wizard)、证书签发(Certificates Wizard),会获得证书链(1_root_bundle.crt)和证书(2_www.yoursite.org.crt),有效期一年。其实startssl本身免费证书支持5个域名!
6、设置apache

<VirtualHost *:443>
 SSLEngine On
 ......

 ServerAdmin support@example.com
 ServerName www.yoursite.org
 ServerAlias yoursite.org
 DocumentRoot /var/www/yoursite.org/ssl/

SSLCertificateFile /etc/ssl/localcerts/2_www.yoursite.org.crt    SSLCertificateKeyFile /etc/ssl/localcerts/apache.key SSLCertificateChainFile /etc/ssl/localcerts/1_root_bundle.crt
 LogLevel warn
 ErrorLog /var/www/yoursite.org/log/error_ssl.log
 CustomLog /var/www/yoursite.org/log/access_ssl.log combined
</VirtualHost>

其他虚拟主机同上设置。
在服务器端 openssl 支持SNI,编译的时候要加上–enable-tlsext,不过从 0.9.8j 版本开始编译的时候默认会加。

证书申请成功

crt

7、SSL安全设置
#禁用 SSLv2 and SSLv3,防止POODLE漏洞。
SSLProtocol All -SSLv2 -SSLv3
#使用安全的Cipher 
SuiteSSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

#如果想兼容XP/IE6 ,请使用以下的配置

Cipher SuiteSSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4

也可以如下设置

SSLCipherSuite ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNULL

这么多格式,也没有像支付宝有那么多需要保密数据,随他了。

Forward Secrecy & Diffie Hellman Ephemeral Parameters ,如果你用的 Apache 2.4.8以上  OpenSSL 1.0.2 或以上版本,可以运行以下命令
cd /etc/ssl/localcerts
openssl dhparam -out dhparam.pem 4096
然后将以下代码添加到网站配置文件
SSLOpenSSLConfCmd DHParameters "/etc/ssl/localcerts/dhparam.pem"
慎用,我apache2.4.7直接跑到cpu100%
最后我们的apache主配置文件可能是下面这样的,你也许要到/etc/apache2/mods-enabled/ssl.conf文件里面找到如下设置。
<IfModule mod_ssl.c>
......
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
SSLHonorCipherOrder     on
SSLCompression off
SSLProtocol All -SSLv2 -SSLv3
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" 
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4 
......
</IfModule>
8、
不要忘记重启apache
sudo service apache2 reatart
9、SSL安全检测https://wosign.ssllabs.com
BAIDU.com B
TAOBAO.com B
支付宝不让检测,估计屏蔽了。
这些大公司都无所谓吗?

2、一时手痒,服务器基本被百度机器人搞死,想想也是,李世石都不是对手。以下是apache日志节选

 

盗用百度图链,以示报复
/access.log
183.60.235.17 - - [11/Mar/2016:15:42:30 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"
183.61.236.16 - - [11/Mar/2016:15:42:30 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"
117.34.28.13 - - [11/Mar/2016:15:42:31 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"

(此处略去114666条......)

119.167.246.14 - - [14/Mar/2016:20:23:03 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"
117.27.149.14 - - [14/Mar/2016:20:23:03 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"
183.61.236.16 - - [14/Mar/2016:20:23:03 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"
117.34.28.14 - - [14/Mar/2016:20:23:03 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"
183.60.235.17 - - [14/Mar/2016:20:23:04 +0800] "GET /archives/ HTTP/1.1" 200 11297 "-" "Baidu-YunGuanCe-SLABot(ce.baidu.com)"
User-Agent:Baidu-YunGuanCe-SLABot(ce.baidu.com) 可用性检测User-Agent:Baidu-YunGuanCe-ScanBot(ce.baidu.com) 安全检测User-Agent:Baidu-YunGuanCe-PerfBot(ce.baidu.com) 速度检测User-Agent:Baidu-YunGuanCe-VSBot(ce.baidu.com) 认证服务 
来源: 百度云观测

3、i’m coming back.

Tagged , .

发表评论

电子邮件地址不会被公开。 必填项已用*标注