自从chrome升级之后,每次打开我自己的网站,浏览器总是有个感叹号,看起来极其碍眼,以后https毕竟是发展趋势,索性就把网站升级成https
升级前的,有个感叹号
升级后的,有个小绿锁,好看多了~~
一、申请证书
使用acme.sh申请letsencrypt证书
- 安装acme
curl https://get.acme.sh | sh
- 创建acme.sh快捷命令
alias acme.sh=~/.acme.sh/acme.sh
创建证书
- nginx 方式
acme.sh --issue -d <域名> --nginx
- -d 后面是域名
创建完成后,证书将放在
~/.acme.sh/<域名>路径下
创建证书保存目录
- 在任意位置创建一个文件夹,名字可以任意
mkdir /var/www/ssl/
- 将
~/.acme.sh/<域名>
下的证书拷贝到/var/www/ssl/
目录下
cp -r ~/.acme.sh/<域名>/ /var/www/ssl/
二、nginx 配置
配置nginx
server {
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
server_name <域名>;
ssl on;
ssl_certificate /var/www/ssl/<域名>/fullchain.cer;
ssl_certificate_key /var/www/ssl/<域名>/<域名>.key;
}
配置http强制跳转到https(采用301方式)
server {
listen 80;
server_name laoyuyu.me www.laoyuyu.me;
return 301 https://www.laoyuyu.me$request_uri;
}
三、安装证书
安装证书
acme.sh --installcert -d <域名> --key-file /var/www/ssl/<域名>/<域名>.key --fullchain-file /var/www/ssl/<域名>/fullchain.cer --reloadcmd "service nginx force-reload"
- -d 后面是域名
- --key-file 后面是<域名>.key 文件
- --fullchain-file 后面是cer证书路径
- --reloadcmd 为重启nginx的命令
三、常见问题
chrome 没有小绿锁
原因是,二级域名没有匹配
如:我这laoyuyu.me是匹配了,但是img.laoyuyu.me没有匹配,这样就不能出现小绿锁
Too many certificates already
证书重置请求超过次数,一般 3 次,子域名除外。就会出现 Sign failed: “detail”:”Error creating new cert :: Too many certificates already issued for exact set of domains: devhitao.com, 5 天以后才可以再次重置。Rate Limits
解决方法:
不使用rewrite ^(.*)$ https://www.laoyuyu.me$1 permanent;
方式,采用301跳转方式
同一个IP上配置多个HTTPS主机出现链接不安全问题
server {
listen 443;
server_name www.quwenqing.com;
ssl on;
ssl_certificate www.quwenqing.com.crt;
}
server {
listen 443;
server_name qwq.quwenqing.com;
ssl on;
ssl_certificate qwq.quwenqing.com.crt;
}
使用上面的配置,不论浏览器请求哪个主机,都只会收到默认主机www.quwenqing.com
的证书。这是由SSL协议本身的行为引起的——先建立SSL连接,再发送HTTP请求,所以nginx建立SSL连接时不知道所请求主机的名字,因此,它只会返回默认主机的证书。
查看是否启用了TLS:
nginx -V
nginx version: nginx/1.4.6
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
查看支持TLS协议支持版本:
nmap --script ssl-enum-ciphers -p 443 192.168.192.120
如果已经支持了,但是二级域名还是失败,检查listen [::]:80 ssl ipv6only=on;
80端口是否开启了ssl,如果有的话,删除这行就行了
server {
# listen 80;
# listen [::]:80 ssl ipv6only=on;
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
server_name <域名>;
ssl on;
ssl_certificate /var/www/ssl/<域名>/fullchain.cer;
ssl_certificate_key /var/www/ssl/<域名>/<域名>.key;
}
四、个人nginx配置
server {
listen 80;
server_name laoyuyu.me www.laoyuyu.me;
return 301 https://www.laoyuyu.me$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl ipv6only=on;
root /var/www/hexo;
server_name laoyuyu.me www.laoyuyu.me;
ssl on;
ssl_certificate /var/www/ssl/www.laoyuyu.me/fullchain.cer;
ssl_certificate_key /var/www/ssl/www.laoyuyu.me/www.laoyuyu.me.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
server_name aria.laoyuyu.me;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
# root /var/www/gitbook;
server_name aria.laoyuyu.me;
ssl on;
ssl_certificate /var/www/ssl/aria.laoyuyu.me/fullchain.cer;
ssl_certificate_key /var/www/ssl/aria.laoyuyu.me/aria.laoyuyu.me.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location /aria_doc {
alias /var/www/gitbook/;
index index.html;
}
location / {
rewrite (.*) https://github.com/AriaLyy/Aria redirect;
}
}