1. 获取SSL证书

根据自己的网站服务器类型来获取相应的ssl证书,我的服务器是ubuntu20.04。证书如下:

1 00_***.key            ## 私钥文件
2 01_CERTIFICATE_***_***.crt   ## 证书文件
3 02_INTERMEDIATE_***.crt    ## 证书链文件

将证书上传到你的服务器上,我是在/etc/ssl/目录下新建了一个文件夹。 

 

2. 配置证书

首先,进入/etc/apache2/sites-available目录,如下:

原先只有000-default.conf和default-ssl.conf两个文件,“.old”结尾的文件用于备用原有配置文件。

做好备份后,我们需要设置一个软链接,把这个文件链接到sites-enabled这个文件夹中,可以使用绝对路径,也可以使用相对路径。我使用的是绝对路径,命令如下:

1 sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf

然后去修改这个文件default-ssl.conf,因为已经做了软链接,所以这时候修改这两个文件夹下的default-ssl.conf都一样。

初始文件内容如下(去除注释):

 1 <IfModule mod_ssl.c>
 2     <VirtualHost _default_:443>
 3         ServerAdmin webmaster@localhost
 4 
 5         DocumentRoot /var/www/html
 6 
 7         ErrorLog ${APACHE_LOG_DIR}/error.log
 8         CustomLog ${APACHE_LOG_DIR}/access.log combined
 9 
10         SSLEngine on
11 
12         SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
13         SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
14     
15         <FilesMatch "\.(cgi|shtml|phtml|php)$">
16                 SSLOptions +StdEnvVars
17         </FilesMatch>
18         <Directory /usr/lib/cgi-bin>
19                 SSLOptions +StdEnvVars
20         </Directory>
21 
22     </VirtualHost>
23 </IfModule>

修改后内容如下(修改的内容后有注释):

 1 <IfModule mod_ssl.c>
 2     <VirtualHost _default_:443>
 3         ServerAdmin ***@***.**   ## 你的邮箱,不修改也可以
 4 
 5         DocumentRoot /var/www/html/policy    ## 你的应用目录
 6 
 7         ErrorLog ${APACHE_LOG_DIR}/error.log
 8         CustomLog ${APACHE_LOG_DIR}/access.log combined
 9 
10         SSLEngine on
11 
12      ## 下面三行配置证书文件
13         SSLCertificateFile    /etc/ssl/***/01_CERTIFICATE_***_***.crt    ## 证书文件,/etc/ssl/***是步骤1中的自定义文件夹
14         SSLCertificateKeyFile /etc/ssl/***/00_***.key    ## 私钥文件
15      SSLCertificateChainFile  /etc/ssl/***/02_INTERMEDIATE_***.crt    ## 证书链文件, 该行在原始文件中是被注释的
16 
17 
18         <FilesMatch "\.(cgi|shtml|phtml|php)$">
19                 SSLOptions +StdEnvVars
20         </FilesMatch>
21         <Directory /usr/lib/cgi-bin>
22                 SSLOptions +StdEnvVars
23         </Directory>
24 
25     </VirtualHost>
26 </IfModule>

PS : 证书链文件可以注释掉。

重要的4个参数,作用如下: 

1 SSLEngine on           ## 启用 SSL 功能
2 SSLCertificateFile        ## 证书文件
3 SSLCertificateKeyFile     ## 私钥文件
4 SSLCertificateChainFile    ## 证书链文件

改好之后,保存;然后加载一下 Apache2 的 SSL 模块:

1 sudo a2enmod ssl           ## 加载模块
2 sudo systemctl restart apache2  ## 重启服务

 此时在浏览器输入https://域名,应该已经可以直接通过 https 的方式来访问网站了。

但是如果不主动输入https://的话,直接输入域名,还是会直接跳转到 80 端口的普通的 http 方式访问,所以想要强制https访问,需要做如下设置。

 

3. 强制 https 访问

打开/etc/apache2/sites-available/000-default.conf文件,在VirtualHost标签内添加如下三行:

1 RewriteEngine on
2 RewriteCond   %{HTTPS} !=on
3 RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

保存,再依次输入如下命令:

1 sudo a2enmod rewrite          ## 启动Apache2重定向
2 sudo systemctl restart apache2    ## 重启Apache2

 至此大功告成。 刷新一下网页,输入域名,就会直接跳转HTTPS访问。