SpringBoot实战电商项目mall(40k+star)地址:github.com/macrozheng/…
摘要
随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!
生成SSL自签名证书
虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的!
- 首先创建SSL证书私钥,期间需要输入两次用户名和密码,生成文件为
blog.key
;
1 | bash复制代码openssl genrsa -des3 -out blog.key 2048 |
- 利用私钥生成一个不需要输入密码的密钥文件,生成文件为
blog_nopass.key
;
1 | bash复制代码openssl rsa -in blog.key -out blog_nopass.key |
- 创建SSL证书签名请求文件,生成SSL证书时需要使用到,生成文件为
blog.csr
;
1 | bash复制代码openssl req -new -key blog.key -out blog.csr |
- 在生成过程中,我们需要输入一些信息,需要注意的是
Common Name
需要和网站域名一致;
1 | ini复制代码Enter pass phrase for blog.key: |
- 生成SSL证书,有效期为365天,生成文件为
blog.crt
;
1 | bash复制代码openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt |
- 其实最终有用的文件是两个,一个是证书文件
blog.crt
,另一个是不需要输入密码的证书私钥文件blog_nopass.key
。
Nginx支持HTTPS
SSL证书生成好了,接下来我们就可以配置Nginx来支持HTTPS了!
安装Nginx
- 我们还是使用在Docker容器中安装Nginx的方式,先下载Nginx的Docker镜像;
1 | bash复制代码docker pull nginx:1.10 |
- 下载完成后先运行一次Nginx,由于之后我们要把宿主机的Nginx配置文件映射到Docker容器中去,运行一次方便我们拷贝默认配置;
1 | bash复制代码docker run -p 80:80 --name nginx \ |
- 运行成功后将容器中的Nginx配置目录拷贝到宿主机上去;
1 | bash复制代码docker container cp nginx:/etc/nginx /mydata/nginx/ |
- 将宿主机上的
nginx
目录改名为conf
,要不然/mydata/nginx/nginx
这个配置文件目录看着有点别扭;
1 | bash复制代码mv /mydata/nginx/nginx /mydata/nginx/conf |
- 创建的Nginx容器复制完配置后就没用了,停止并删除容器;
1 | bash复制代码docker stop nginx |
- 使用Docker命令重新启动Nginx服务,需要映射好配置文件,由于我们要支持HTTPS,还需要开放
443
端口。
1 | bash复制代码docker run -p 80:80 -p 443:443 --name nginx \ |
配置支持HTTPS
- 将我们生成好的SSL证书和私钥拷贝到Nginx的
html/ssl
目录下;
1 | bash复制代码cp blog_nopass.key /mydata/nginx/html/ssl/ |
- 接下来我们需要给
blog.macrozheng.com
这个域名添加HTTPS支持,在/mydata/nginx/conf/conf.d/
目录下添加Nginx配置文件blog.conf
,配置文件内容如下;
1 | ini复制代码server { |
- 通过
HTTPS
访问blog.macrozheng.com
这个域名,由于我们使用的是自己签名的SSL证书,浏览器会提示您的连接不是私密连接
,点击继续前往可以通过HTTPS正常访问;
- 我们可以查看下证书的
颁发者
信息,可以发现正好是之前我们创建SSL证书签名请求文件时录入的信息;
- 接下来我们需要给
api.macrozheng.com
这个域名添加HTTPS支持,通过这个域名可以使用HTTPS访问我们的SpringBoot应用,api.crt
和api_nopass.key
文件需要自行生成,在/mydata/nginx/conf/conf.d/
目录下添加Nginx配置文件api.conf
,配置文件内容如下;
1 | perl复制代码server { |
- 通过
HTTPS
访问api.macrozheng.com
这个域名,访问地址为:api.macrozheng.com/swagger-ui.…
- 任意调用一个接口测试下,比如说登录接口,可以发现已经可以通过HTTPS正常访问SpringBoot应用提供的接口。
使用受信任的证书
之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,另一种是从FreeSSL申请。
阿里云证书
- 阿里云上可以申请的免费证书目前只有支持单个域名的DV级SSL证书。比如说你有
blog.macrozheng.com
和api.macrozheng.com
两个二级域名需要使用HTTPS,就需要申请两个SSL证书。
- 申请成功后点击下载Nginx证书即可;
- 下载完成后解压会有下面两个文件;
1 | bash复制代码blog.macrozheng.com.key # 证书私钥文件 |
- 拷贝证书文件到Nginx的指定目录下,然后修改配置文件
blog.conf
,只要修改证书配置路径即可,修改完成后重启Nginx;
1 | bash复制代码#SSL配置 |
- 再次通过HTTPS访问
blog.macrozheng.com
这个域名,发现证书已经有效了,连接也是安全的了。
FreeSSL证书
- 如果你有使用通配符域名的需求,可以上
FreeSSL
申请SSL证书,不过免费的有效期只有3个月,这就意味着你过3个月就要重新申请一次了。
- 附上官网地址:freessl.cn/
使用acme.sh
自动申请证书
acme.sh
脚本实现了acme
协议, 可以从letsencrypt
生成免费的证书。一般我们申请的证书有效期都是1年,过期就要重新申请了,使用acme.sh
脚本可以实现到期自动申请,再也不用担心证书过期了!
- 附上官网地址:github.com/acmesh-offi…
本文 GitHub github.com/macrozheng/… 已经收录,欢迎大家Star!
本文转载自: 掘金