自建网站一般是http传输,现在浏览器访问时会有不安全提示,通过openSSL服务生成自签名加密证书,以支持https方式访问,web服务器为Apache2,环境Ubuntu16

1. 启用SSL模块

apache2安装后,一般默认就已经启用SSL模块,若未启用,通过以下命令启用:

sudo a2enmod ssl

2. 安装openSSL

安装命令:

sudo apt install openssl

3. 创建存放证书文件夹

进入apache2安装目录:

cd /etc/apache2

创建文件夹:

sudo mkdir ssl

4. 创建CA签名

进入欲存放证书的文件夹:

cd /etc/apache2/ssl

创建CA:

openssl genrsa -out apache2.key 1024

5. 创建CSR

openssl req -new -key apache2.key -out apache2.csr

创建过程中会提示输入所在地、邮箱等信息,根据提示按实际情况输入即可。

注意其中的Common Name项填写的是要配置的域名,可使用通配,即*.address.com形式。

6. 自行签发证书

openssl x509 -req -days 365 -in apache2.csr -signkey apache2.key -out apache2.crt

7. 修改Apache配置

编辑配置文件:

vi /etc/apache2/sites-available/default-ssl.conf

修改以下内容:

SSLEngine on
SSLoptions +StrictRequire
SSLCertificateFile /etc/apache2/ssl/apache2.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache2.key

8. 使配置生效

使SSL配置文件生效:

a2ensite default-ssl

重新加载服务:

service apache2 reload

至此,已可通过HTTPS访问。

9. 配置站点

至此,已配置好SSL,但要具体应用到站点,还需创建虚拟主机,以本站域名wteng.top为例,进入配置文件夹,并创建一个新的站点配置文件:

cd /etc/apache2/sites-available
vi 001-default.conf

在配置文件中配置一个443虚拟主机(当然,虚拟主机也可与80端口虚拟主机配在同一文件,但为了便于管理,建议分开配置):

<VirtualHost wteng.top:443>        #新建虚拟主机
    ServerName wteng.top    #虚拟主机名,即域名
    ServerAdmin my@wteng.top    #管理员
    DocumentRoot: /var/www/html/blog
    SSLEngine on
    SSLCertificateFile: "/etc/apache2/ssl/apache2.crt"
    SSLCertificateKeyFile: "/etc/apache2/ssl/apache2.key"   #证书路径
</VirtualHost>

然后应用该配置文件并重新加载配置:

a2ensite 001-default    #应用配置
service apache2 reload   #重新加载配置

如此,即可通过https://wteng.top访问.

10. 强制HTTPS跳转

要实现在任意情况下都通过https通道传输,即在通过http协议访问时,也会自动跳转至https,可通过强制https跳转实现,只需编辑配置文件/etc/apache2/apache2.conf,找到并修改<Directory /> </Directory>标签中的内容如下:

<Directory />
    Options FollowSymLinks
    AllowOverride all
    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI}
    Require all denied
</Directory>

重新加载:

service apache2 reload