公司企业网站买了证书后想要把原来的http服务转为https的服务,并实现http到https的自动跳转。
1.准备ssl证书
从公司购买证书后,会得到三个文件,分别是server.crt 文件,server.key文件,cfca.crt文件,其中cfca.crt文件是自己复制证书编码生成的文件。我们公司购买的是中国金融认证中心的SSL证书。
证书准备完毕后,复制三个文件至Apache容器所在的文件配置目录,可以自己新建一个文件夹保存,我放在conf目录下新建的ssl_crt文件夹中,后面配置会用到文件路径。
2.设置httpd_ssl.conf配置文件
用文本编辑器打开 Apache 根目录下的 conf/httpd.conf 文件,去掉下述两行 的注释符号#。
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
用文本编辑器打开 Apache 根目录下的 conf/extra/httpd-ssl.conf 文件,修改以下内容:
<VirtualHost 127.0.0.1:443>
DocumentRoot "/var/www/html" ServerName
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCertificateFile server.crt 路径
SSLCertificateChainFile cfca.crt 路径
SSLCertificateKeyFile server.key 路径
</VirtualHost>
其中:
启用 SSL 功能:SSLEngine on
禁用 SSLv2、SSLv3 协议:SSLProtocol all -SSLv2 -SSLv3
公钥文件:SSLCertificateFile server.crt 路径
私钥文件:SSLCertificateKeyFile server.key 路径
证书链文件:SSLCertificateChainFile cfca.crt 路径
以上三个文件即在第一步准备的三个文件。
上述设置完成过后,重新启动 Apache。
遇到的问题:1.配置完成后,重启Apache访问遇到403
解决:修改conf/extra/httpd-ssl.conf文件,DocumentRoot 文件根目录配置错误,根目录一定是要写到index文件所在层。其次打开 apache的配置文件httpd.conf,找到这段代码:
代码如下:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
有时候由于配置了php后,这里的“Deny from all”已经拒绝了一切连接。把该行改成“allow from all”。pache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化以前是将 deny from all 全部改成Allow from all实现外网访问现在是将Require all denied以及 Require local 都改为 Require all granted。
3.设置http自动跳转到https
1.打开Apache/conf/httpd.conf,找到 #LoadModule rewrite_module modules/mod_rewrite.so 去掉#号。
2.打开Apache/conf/httpd.conf,找到你网站目录的<Directory>段,比如我的网站目录是c:/www,找到
<Directory “C:/www”>
…
</Directory>
修改其中的 AllowOverride None 为 AllowOverride All。
3.重启apache服务
4.设置重定向规则
1)在你网站目录即第三部设置的DocmentRoot目录下放一个.htaccess文件
2)编辑器打开.htaccess文件,写入如下规则:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/index.php
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]
解释:
%{SERVER_PORT} —— 访问端口
%{REQUEST_URI} —— 比如如果url是 http://localhost/tz.php,则是指 /tz.php
%{SERVER_NAME} —— 比如如果url是 http://localhost/tz.php,则是指 localhost
以上规则的意思是,如果访问的url的端口不是443,且访问页面不是tz.php,则应用RewriteRule这条规则。这样便实现了:访问了 http://localhost/index.php 或者 http://localhost/admin/index.php 等页面的时候会自动跳转到 https://localhost/index.php 或者 https://localhost/admin/index.php,但是访问 http://localhost/tz.php 的时候就不会做任何跳转,也就是说 http://localhost/tz.php 和 https://localhost/tz.php 两个地址都可以访问。