自建网站一般是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