文章又名:https多网站1个IP多个SSL证书的Apache设置办法
引言:
- 老式的SSL证书是一个证书一个站点一个IP的一一对应,但后来有了改进;
- 可以配置为一台服务器多个IP,分别对应不同的站点、不同的证书;
- 还可以配置为一台服务器一个IP,多个端口号对应不同的站点、不同的证书;
- 后来出现SNI(Server Name Indication服务器名称指示)技术,让https与http一样实现一台服务器多个虚拟站点,每个站点都可以对应不同的证书,无需多个IP、无需多个端口(全部都用https标准的端口号443),多个域名、泛域名都支持。
设置过程:
1.获取证书
::购买证书不多阐述,网上很多教程都讲过。
linux下生成一个自签名证书
下面的命令可以被用来产生一个自签名的证书。
首先,生成2048位的加密私钥
# openssl genrsa -out server.key 2048
然后,生成证书签名请求(CSR),这里需要填写许多信息,如国家,省市,公司等
# openssl req -new -key server.key -out server.csr
最后,生成类型为X509的自签名证书。有效期设置3650天,即有效期为10年
# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
将证书文件放置到httpd程序的conf目录下
下面的命令可以被用来产生一个自签名的证书。
首先,生成2048位的加密私钥
# openssl genrsa -out server.key 2048
然后,生成证书签名请求(CSR),这里需要填写许多信息,如国家,省市,公司等
# openssl req -new -key server.key -out server.csr
最后,生成类型为X509的自签名证书。有效期设置3650天,即有效期为10年
# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
将证书文件放置到httpd程序的conf目录下
2.配置httpd.conf文件
#启用ssl模块
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#Include conf/extra/httpd-ssl.conf
弃掉前面的 # 号
3.配置extra/httpd-ssl.conf
可以新建一个文件替代,如新建文件extar/ssl_one.conf
相应的,在httpd.conf中将Include conf/extra/httpd-ssl.conf条目修改为Include conf/extra/ssl_one.conf
下面是实例:
Listen 443 NameVirtualHost *:443 SSLStrictSNIVHostCheck off <VirtualHost _default_:443> DocumentRoot "/usr/local/apache/htdocs/example.com" ServerName example.com ServerAlias subdomain.example.com ServerAdmin you@example.com SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile "/usr/local/apache/conf/server.crt" SSLCertificateKeyFile "/usr/local/apache/conf/server.key" SSLCertificateChainFile "/usr/local/apache/conf/1_root_bundle.crt" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/usr/local/apache/htdocs/example.com"> AllowOverride All SSLOptions +StdEnvVars </Directory> </VirtualHost> <VirtualHost *:443> DocumentRoot "/usr/local/apache/htdocs/example2.com" ServerName example2.com ServerAlias subdomain.example2.com SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 SSLCertificateFile "/usr/local/apache/conf/server2.crt" SSLCertificateKeyFile "/usr/local/apache/conf/server2.key" SSLCertificateChainFile "/usr/local/apache/conf/1_root_bundle2.crt" <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory "/usr/local/apache/htdocs/example2.com"> AllowOverride All SSLOptions +StdEnvVars </Directory> </VirtualHost>
说明:一个<VirtualHost>代表一个站点
4.重启apache
service httpd restart
5.说明:
- wdcp v3版本以上亲测可用
- centos 6.x,7.x设置方法相同
- 多站点,有证书、没证书的站点放在一起,访问没证书的站点时会出问题,详细情况请你实践中寻找。
- nginx 引擎下的设置方法:https://www.0-n-0.com/444.html