在Apache服务器上安装ssl证书,开启https服务

10月 6, 2016

​ 网络上有很多申请SSL证书的网站,有收费的、有免费的,这里为了学习就以沃通免费证书为例,部署方式大同小异,本文的重点在于部署证书到服务器上。

1、申请证书

2、部署到Apache服务器

  • 解压 解压压缩包里的for Apache文件夹。

  • 上传到服务器 用SSH登录的方式,把for Apache文件夹里的三个文件上传到Linux服务器。路径为 /usr/local/apache/conf/ssl 。

  • 开启httpd的SSL功能
    修改httpd.conf文件,将下边一行的注释去掉。(默认不用修改)

    1
    LoadModule ssl_module modules/mod_ssl.so
  • 编辑主机文件vhosts.conf 不同主机不同文件,我这边是vhosts.conf文件。

添加443端口的主机,在VirtualHost代码块里添加SSL的配置,路径是上次的三个文件的路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<VirtualHost *:443>
DocumentRoot "/data/wwwroot/www"
ServerName www.wugenglong.com
ServerAlias wugenglong.com
SSLEngine on
SSLCertificateFile "/usr/local/apache/conf/ssl/2_www.wugenglong.com.crt"
SSLCertificateKeyFile "/usr/local/apache/conf/ssl/3_www.wugenglong.com.key"
SSLCertificateChainFile "/usr/local/apache/conf/ssl/1_root_bundle.crt"
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<Directory "/data/wwwroot/www">
SetOutputFilter DEFLATE
Options FollowSymLinks ExecCGI
Require all granted
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
</VirtualHost>

完整的配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www"
ServerName www.wugenglong.com
ServerAlias wugenglong.com
<Directory "/data/wwwroot/www">
SetOutputFilter DEFLATE
Options FollowSymLinks ExecCGI
Require all granted
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
</VirtualHost>
<VirtualHost *:443>
DocumentRoot "/data/wwwroot/www"
ServerName www.wugenglong.com
ServerAlias wugenglong.com
SSLEngine on
SSLCertificateFile "/usr/local/apache/conf/ssl/2_www.wugenglong.com.crt"
SSLCertificateKeyFile "/usr/local/apache/conf/ssl/3_www.wugenglong.com.key"
SSLCertificateChainFile "/usr/local/apache/conf/ssl/1_root_bundle.crt"
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<Directory "/data/wwwroot/www">
SetOutputFilter DEFLATE
Options FollowSymLinks ExecCGI
Require all granted
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
</VirtualHost>

重启httpd即可

1
service httpd restart

重启成功但访问失败,请检查防火墙是否放行443端口,或者在上边的配置文件中的头部加上Listen 443。

###将80端口重定向到443端口,两个方法

第一种方法:在网站根目录新建.htaccess文件

1
2
3
4
5
6
7
8
9
10
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
//将不带www的域名重定向到www域名
RewriteCond %{HTTP_HOST} ^wugenglong.com$ [NC]
RewriteRule ^(.*)?$ https://www.%{SERVER_NAME}$1 [L,R]
//将非443端口重定向到443
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R]
</IfModule>

第二种方法:在vhosts.conf配置文件里的80端口VirtualHost代码块里添加下列代码

1
2
3
4
5
6
7
RewriteEngine On
//将不带www的域名重定向到www域名
RewriteCond %{HTTP_HOST} ^wugenglong.com$ [NC]
RewriteRule ^(.*)?$ https://www.%{SERVER_NAME}$1 [L,R]
//将非443端口重定向到443
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R]