先说前提条件:
项目上线一天后反应说http浏览器显示不安全 看着不好看 要做成https的 因为之前没有接触过,所以一开始是很蒙蔽的,只知道https比较安全,需要有个有权威的CA来认证,签发证书... 任务下来了 就开始了自己瞎jb琢磨的道路....
一开始脑袋有泡 不知道咋jb想的 自己用openssl 自己签了个... 然后配到nginx上以后 网页提示不是私密链接 跟钓鱼网站一样.... 吓得我赶紧关了 有了这次经验 自己的胆子已经有点儿小了 不敢乱改了,就算乱改 也不敢重启了。
首先 讲一下 用来签名的工具
这jb图标 长得真讨喜昂哈哈哈哈哈哈哈 感谢 非常感谢解决我的问题 感谢这个网站 感谢无私奉献的人啊啊啊啊 啊
安装cerbot的命令 我用的是ubuntu 16
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
执行上面命令 安装完成 :)
然后有了解到 cerbot 签名有两种方式 一种是 --webroot 一种是 --Standalone 在网上看到的区别是 第一种不需要停现在的服务 第二种需要停掉服务 那好 我需要的是第一种 :)
然后确认下你要签名的域名 是否已经指向你自己的服务器了 还有云服务的话 要记得看下安全组 443端口有没有开 总之就是要确认你的准备工作是没问题的
在nginx 监听80的那个server里面 配上
location ~ /.well-known {
allow all;
}
以确保 所有人可以访问这个 .well-known 文件 因为等下webroot会在你的服务器端创建一个这样的文件 并通过80段端口来访问它,确定这个域名确实是你的
然后执行
sudo certbot certonly --webroot -w /home/ubuntu/hello/ -d www.hello.com
这个 -w后面的参数 是你服务器段的路径 我当时指定的是我们前段文件的位置 具体服务器其他路径可以不可以 我没有尝试
-d后面 是你的域名
成功后大概是这样子
昂 主要看到Congratulations就可以了 :) 然后他的密钥会放到 /etc/letsencrypt/live/你的域名/
一个fullchain.pem 一个 privkey.pem 这个域名下面还有很多其他的key 具体做什么用 我也没看 .....
然后 在nginx里面 443的server里面开始配置
server {
listen *:443;
ssl on;
server_name www.hello.com; #这里是你的域名
ssl_certificate "/etc/letsencrypt/live/www.hello.com/fullchain.pem"; #生成的密钥对
ssl_certificate_key "/etc/letsencrypt/live/www.hello.com/privkey.pem";#生成的密钥对
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用的协议
ssl_ciphers HIGH:!aNULL:!MD5;#使用的加密算法
location / {
root /home/ubuntu/service/;#这个是前段页面的路径
index index.html index.htm;
autoindex on;
}
location ^~ /iaa/ { #这里是因为我们是前后台分离的 前台调用我后台的接口 后台接口的前缀都是这个
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; #这个如果不配置 每个请求到后台的 发起地址都是服务器的ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;proxy_pass http://www.hello.com:8889;
}
}
配上这个 然后把80端口监听到的再跳转到https上 就实现了 所有的请求都归到https上
server {
listen *:80;
server_name www.hello.com ; #如果有多个域名跳转到这个服务器 用空格隔开就行
return 301 https://www.hello.com/;
}
然后访问你的服务 就会发现 这个标志