配置HTTPS
一、SSL证书申请:
二、开通证书:购买位置:打开阿里云找到“产品”-“安全”-“CA证书服务”-点击“立即购买”;
选择方法:证书类型选择”专业版OV SSL”->”1个域名”->”Symantec”(这里选择完成后上面证书类型出现了“免费型DV SSL”)->证书类型选择”免费型DV SSL”->然后继续购买就可以了;
此处注意不要填xxx.xxx
的形式, 因为这种证书只能绑定一个域名
域名验证类型:一路点击后来到后台中的CA证书服务(也可以自己从阿里后台找),在”进度”栏目中有”补全”,点击”补全”,一直输入一直往下点击,直到有个”域名验证类型”,这里选择DNS。
全部填写完成后等待一会就开通了。
DNS解析配置:紧接上步,开通成功会有要求添加txt的解析记录,解析记录的值也会给你,然后去添加
三、部署服务器:
由于我的环境是apache, 这里主要是有关apche的配置项nignx的参考
第一 、php开启php-openssl拓展
如果没开启的话, 如果是yum方式安装的apache, 则运行yum install mod_ssl
第二、
一、进入到apache目录下在conf 文件夹下 httpd.conf中找到
LoadModule ssl_module modules/mod_ssl.so
去掉前面的注释符,使得ssl模块生效(如果该模块已去掉注释,请不用操作)。
如果重启用status查看得知mod_ssl.so无法加载,
并且是通过安装包方式安装的apache
需要t通过以下方法加入该模块:
如果是通过yum方式安装的httpd, 则只需要执行 yum install mod_ssl
1、根据服务器apache版本下载对应版本:apache历史版本下下载
2、解压下载的版本文件 将modules下的loggers,ssl两个文件【一定是两个文件否则出错】放到服务器端apache的modules下
3、执行 /usr/bin/apxs -a -i -c mod_ssl.c (/usr/bin/apxs为find出来的apxs路径)
apxs是一个apache模块安装工具
4、如果出现错误:
In file included from mod_ssl.c:27:0:
ssl_private.h:85:30: fatal error: openssl/opensslv.h: No such file or directory
5、则要先sudo yum install openssl-devel
6、再次执行/usr/bin/apxs -a -i -c mod_ssl.c 发现已经生成mod_ssl.so文件
如果到第6步, so文件生成了但是还是无法加载, 则执行yum install mod_ssl
二、在加载虚拟域名的配置文件下增加加载hosts_ssl.conf的配置文件,如果已有则去掉注销#
<IfModule ssl_module>
Include conf/http_ssl.conf
</IfModule>
(也有版本是在文件ssl.load文件中对模块进行管理)
第三,在apche安装目录新增cert文件夹放入在阿里云申请成功并下载下来的证书文件。
第四、配置http_ssl.conf文件
阿里云推荐配置:
打开 apache 安装目录下 conf/extra/httpd-ssl.conf 文件 (也可能是conf.d/ssl.conf,与操作系统及安装方式有关), 在配置文件中查找以下配置语句:
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/public.pem
# 证书私钥配置
SSLCertificateKeyFile cert/215016420810269.key
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/chain.pem
自己的VirtualHost 节点需要额外实现:
<VirtualHost [服务器ip]:443>
ServerAdmin your.com
ServerName your.com
DocumentRoot /data/www/hbappserver/public
SSLEngine on
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/public.pem
# 证书私钥配置
SSLCertificateKeyFile cert/215013163210269.key(拿到的key)
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/chain.pem
</VirtualHost>
第五、重要
!!!!!配置httpd-vhosts.conf文件
除了在http_ssl.conf中增加域名节点外,原有虚拟域名配置文件httpd-vhosts.conf也要增加结点否则httpds不会生效,我看大部分参考资料都没有这一步,可能环境不同吧, 我这里是LAMP且yum源安装。
<VirtualHost *:443>
ServerAdmin your.com
ServerName your.com
DocumentRoot /data/www/hbappserver/public
SSLEngine on
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置
SSLCertificateFile cert/public.pem
# 证书私钥配置
SSLCertificateKeyFile cert/215013163210269.key(拿到的key)
# 证书链配置,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile cert/chain.pem
</VirtualHost>
第六:在阿里云服务器中安全组设置中开放服务器的443端口,选择开放类型为https
第七:重启apache
注意事项:
1、阿里云申请域名是,是填一个顶级域名和子域名, 填xxx.xxx.xxx的格式(只能保护一个域名)
2、apche的httpd.conf文件中如果没有mod_ssl模块, 要额外运行yum安装mod_ssl模块,
这样它就会生成mod_ssl.so和httpd-ssl.conf文件了
3、同理如果第二步找不httpd-ssl.conf,在运行完安装mod_ssl后直接把Include conf/hosts_ssl.conf加最后一行
4、阿里云建议的apache设置并不对
记得在hosts_ssl.conf文件中设置本服务ip和ServerName设置域名(与申请ssl时所填一致)。
并且除了在VirtualHost外的设置项
SSLProtocol SSLCipherSuite SSLHonorCipherOrder 这几项也在VirtualHost 中需要加入。
5、配置http.conf文件时,需要清除它的加载原理,参考如下
Apache主配置文件httpd.conf 详解:
Apache服务器的配置信息全部存储在主配置文件/etc/httpd/conf/httpd.conf中,这个文件中的内容非常多,用wc命令统计一共有1009行,其中大部分是以#开头的注释行。
一般, 如果你centos通过yum源安装一般是在 /etc/httpd/conf/httpd.conf 目录下,,有些系统的镜像也安装在apache目录下 ,具体可以通过find / -name
命令查找。
配置文件包括三部分:
Section 1: Global Environment 服务器参数和加载模块设置
Listen 80 端口 如有多块网卡,默认监听所有网卡
StartServers 8 开始服务时启动8个进程
MinSpareServers 5 限制同一时刻客户端的最大连接请求数量超过的要进入等候队列
MaxSpareServers 20 每个进程生存期内允许服务的最大请求数量,0表示永不结束
ServerLimit 256 服务器允许配置进程数的上限。
MaxClients 256 同时最多能发起250个访问,
User apache
Group apache
启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全
DocumentRoot
网站文件根目录和对根目录的一个权限的设置
DocumentRoot "/var/www/html"
317 <Directory "/var/www/html">
331 Options Indexes FollowSymLinks 当网页不存在的时候允许索引显示目录中的文件,
338 AllowOverride None 是否允许访问符号链接文件。
343 Order allow,deny 表示不允许这个目录下的访问控制文件来改变这里的配置
344 Allow from all 对页面的访问控制顺序
346 </Directory>
网页支持:
AddType application/x-tar .tgz 支持的应用如果想支持对`php`的解析添加这样一行
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
添加动态处理类型为server-parsed由服务器预先分析网页内的标记,将标记改为正确的HTML标识
添加动态处理类型为server-parsed由服务器预先分析网页内的标记,将标记改为正确的HTML标识
ServerName
默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定IP地址,当这项不正确的时候服务器不能正常启动。前面启动Apache时候提示正在启动 httpd:httpd: apr_sockaddr_info_get() failed forjustin httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1forServerName,解决方法就是启动该项把www.example.com:80修改为自己的域名或者直接修改为localhost
服务器模块加载
注意以下几个模块,涉及到httpd服务器能否正确跑起来
LoadModule dir_module modules/mod_dir.so
LoadModule systemd_module modules/mod_systemd.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
Section 2: 'Main' server configuration
-主服务配置,相当于是Apache中的默认Web站点,如果我们的服务器中只有一个站点,那么就只需在这里配置就可以了。
一般服务器这部分的配置可以省略
Section 3: Virtual Hosts []
虚拟主机不能与Main Server主服务器共存,当启用了虚拟主机之后,Main Server就不能使用了。
Virtual Hosts文件加载:
vhost_alias_module(引入mod_vhost_alias.so)模块加载时允许配置一个http的虚拟主机文件(httpd-vhost.conf),
ssl_module(引入mod_ssl.so)模块加载时允许配置一个https的虚拟主机文件包括http域名的虚拟主机httpd-sll.conf
在以上两个文件,都通过添加类似:
<VirtualHost *:80>
ServerName example.com
ServerAlias example.com
DocumentRoot /data/www/Shop
</VirtualHost>
<VirtualHost *:443>
# https需要额外配置证书信息
DocumentRoot "/data/www/public"
ServerName example.com
ErrorLog "/usr/local/apache/logs/error_log"
TransferLog "/usr/local/apache/logs/access_log"
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLCertificateFile cert/public.pem
SSLCertificateKeyFile cert/215016596360269.key
SSLCertificateChainFile cert/chain.pem
的结点来配置虚拟域名,重启生效。