标签 ssl 下的文章

同一台服务器Nginx防止未配置SSL证书的站点通过https访问跳转到配置了SSL(https)证书的站点

服务器:CentOS
环境:Nginx+MySQL+PHP

之前在这台服务器上配置了多个vhost站点,其中有一个还配好了SSL证书(https访问),其他站点都没配置。今天有个同事发现,当通过https访问其中一个未配置ssl证书的网站时,浏览器(谷歌、火狐都会)会提示证书风险,选择继续访问后,内容却是配置了ssl证书的那个站点。

后来查询得知,通过https协议访问未配置ssl证书的站点时,默认会跳转到一个(如果配置了的话)https站点,要禁止这种跳转,需要配置一个默认ssl(无效的也可以)server,具体如下:

server {
 listen 443 default_server;
 server_name _ ;
 ssl on;
 ssl_certificate crt/1_xxxx.com_bundle.crt; # 这里可以是无效的证书
 ssl_certificate_key crt/2_xxxx.com.key; # 这里可以是无效的证书
 return 301 http://$host$request_uri; # 跳转到http协议访问
}

最后一句(return)强制把未配置ssl证书的https访问都跳转到http协议上,问题解决。
这是目前得到的解决方案,如果还有更好的,欢迎大家指出!

Apache 配置多个https站点

工作中经常会遇到在同一台服务器上部署多个https站点的情况,本文简单介绍实现方法。

假设apache已经安装了ssl模块。检测方法:cd /etc/httpd/modules;ll|grep ssl,如结果为 mod_ssl.so ,表示已经安装,如结果为空,则未安装。安装方法请自行搜索。

如服务器开启了iptables防火墙,请放开443端口

申请ssl证书,下载,部署到服务器相关目录

本人在腾讯云申请的免费 TrustAsia TLS RSA CA 证书
cd /etc/httpd/conf.d
mkdir crt
# 上传三个证书文件到 crt 目录
# 文件分别是:1_root_bundle.crt,2_www.domain.com_cert.crt 和私钥文件 3_www.domain.com.key
# 以上www.domain.com 请替换成自己的域名

修改apache配置

LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443 # 这一句很关键,否则只有第一个虚拟主机生效
# 第一个虚拟主机
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName domaintest.cn
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/default/2_domaintest.cn.crt
SSLCertificateKeyFile /etc/httpd/ssl/default/3_domaintest.cn.key
SSLCertificateChainFile /etc/httpd/ssl/default/1_root_bundle.crt
</VirtualHost>
#第二个虚拟主机
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName web.domaintest.cn
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/web/2_web.domaintest.cn.crt
SSLCertificateKeyFile /etc/httpd/ssl/web/3_web.domaintest.cn.key
SSLCertificateChainFile /etc/httpd/ssl/web/1_root_bundle.crt
</VirtualHost>

测试配置文件,无误后重启apache服务

httpd -t # 检测配置文件
httpd -k restart # 重启服务

Chrome浏览器检查元素,如看到绿色的 This page is secure(valid HTTPS). 字样,表示安装成功。

微信图片_20181205114633.png
至此,多站点https服务部署完成。