域名、SSL证书、服务器我们公司都用的是非中国大陆的,主要是为了避开备案、审核等繁琐过程。
SSL证书我购买的是Godaddy UCC/SAN SSL证书,可以配置5个域名。
SSL证书购买界面
购买完后在你的Godaddy管理平台就能看到你购买的证书,然后操作界面去配置你的域名
购买到的SSL证书
配置域名时有两种方式,方式一(也是默认方式)是通过界面输入你要配置的主域名,以及4个备域名(SAN),即使你现在不够4个备域名配置也没关系,以后可以继续加的,放心配置即可。
输入域名点击提交后,界面上会显示生成了两个文件:csr、private-key,点击保存按钮可以将这两个文件以txt文件的格式保存到本地:generated-csr.txt、generated-private-key.txt。在后面的配置中,可以直接将generated-private-key.txt后缀名改成.key,变成generated-private-key.key,作为SSL的私钥文件使用。
但配置完nginx的ssl_certificate、ssl_certificate_key后重启nginx时,有可能会保存不成功,出现以下错误信息
[emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl/myxxxxgame201904.key") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: ANY PRIVATE KEY error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
原因是.key文件的编码有问题,需要将编码格式由UTF-8改成ANSI
iconv -c -f UTF8 -t ASCII generated-private-key.key >> generated-private-key.key
方式二(选择右边的方式二上传csr)是先在你服务器生成.csr和.key文件,然后将.csr内容拷贝到界面的配置输入框中,本文主要介绍用方式二来进行配置。
一开始我是用方式一做的,没有成功(应该是防火墙的问题),然后想删除证书重新进行配置,所以进行了revoke(永久删除)操作,一操作完,发现刚花了1700RMB买的SSL证书不见了,吓出一身冷汗,最后还是通过联系客服找了回来,联系客服可以扫描Godaddy的微信公众号,客服会通过微信的方式和你进行沟通,Godaddy的客服响应速度非常快,态度也非常好,个人的体验可以给满分,给Godaddy点个赞,Godaddy比国内的某些平台售后体验好很多。给各位的建议是,千万不要手贱进行revoke操作!
Godaddy 官网上有相关的操作文档可以进行参考
Godaddy SSL 证书 帮助
Godaddy 生成 NGINX CSR
通过 SSH 连接至您的服务器
首先第一步先登录自己的服务器,然后在自己的服务器上生成私钥和.csr的文件。
openssl req -new -newkey rsa:2048 -nodes -keyout 您的域名.key -out 您的域名.csr
用您保护的域名替换您的域名。 例如,如果您的域名是 coolexample.com,您可以键入 coolexample.key 和 coolexample.csr。
以下是我填写的信息,部分敏感信息我用test替代
Country Name (2 letter code) [XX]:MO
State or Province Name (full name) []:Macao
Locality Name (eg, city) [Default City]:Macao
Organization Name (eg, company) [Default Company Ltd]:Go MACAO
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:www.test.com
Email Address []:test@126.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:test_pwd
An optional company name []:www.test2.com,www.test3.com,www.test4.com
其中www.test.com是你要配置的主域名,下面的test2,test3,test4是备域名(我买的这SSL证书可以配置5个域名)。
在文本编辑器中打开 CSR,然后复制所有文本到Godaddy管理平台SSL配置的界面。
复制CSR
点击【保存】按钮,然后再点击最下面的【提交所有已保存的更改】
如果【提交所有已保存的更改】按钮一直为灰色不可点击,可以尝试换一个浏览器操作,我用google浏览器不行,换成Safari就可以了。
提交之后Godaddy会对我们的证书进行审核,审核通过或就会颁发证书,这个审核时间非常短,两分钟之内就能审核完成。
4.1 下载证书文件
下载列表里没有Nginx的选项,我们选择【其他】进行下载即可
下载的证书文件有三个,其中两个.crt文件,需要通过cat 命令将这两个文件合并成一个.crt文件(后面会讲到),一个.pem文件,这个文件我们用不到。
CentOS 7 上的 NGINX: 安装证书
在服务器上去配置证书。你把下载的东西解压,会发现一个随机数.crt,一个随机数.pem。这个两个的文件是一样的,再一个gd_开头的.crt的文件。只要2个.crt的文件就好了。你把这连个上传到服务器上,然后通过命令合并成一个文件。
cat f84e19a2f44c6386.crt gd_bundle-g2-g1.crt >> coolexample.crt
再去Nginx配置文件中配置就好了。这个时候有最开始生成的.key文件(私钥)和一个合并之后.crt文件(证书)。
server{
listen 80;
server_name test.com www.test.com;
return 301 https://$host$request_uri;
}
server{
listen 443 ssl;
server_name test.com www.test.com;
ssl_certificate /etc/nginx/conf.d/cert/test.crt;
ssl_certificate_key /etc/nginx/conf.d/cert/test.key;
location /{
root /data/pc/test/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
配置完后重启nginx,就可以用https访问了,同时,.crt和.key文件可以在不同目录,不一定非要在一个目录里。
正常的话,执行完以上的操作就完成了SSL的配置,就已经可以用https来访问了。但我执行完以上操作后发现https一直是失败的,而且我也确定在阿里云的ECS安全组已经开放了80和443端口,最后找到原因是防火墙的问题。
firewall-cmd --list-ports
看看输出有没有80/tcp与443/tcp
5.2 允许TCP协议下的 80,443 端口 暴露到互联网
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
至此,SSL的配置工作已经全部结束了,虽然我用的是Godaddy平台的SSL,同理,其他平台的SSL配置也是类似。
以下均采用ciika.com作为例子
---------在linux服务器上操作---------
1:生成key(确保机器上安装了openssl)
openssl genrsa -out ciika.com.key 2048
( SHA-2 和 2048 位加密)
2:生成csr文件(godaddy需要用)
openssl req -new -key ciika.com.key -out ciika.com.csr
---------在godaddy上操作---------
3:上传csr
复制第2步里面生成的csr(ciika.com.csr),粘贴到输入框
4:等待审核结果
5:审核通过后下载证书zip文件
里边包含61925e49dabae55a.crt和gd_bundle-g2-g1.crt
---------在linux服务器上操作---------
6:生成crt文件
cat 61925e49dabae55a.crt gd_bundle-g2-g1.crt > ciika.com.crt
7:更改nginx配置
核心配置为
listen 443;
ssl on;
ssl_certificate ciika.com.crt;
ssl_certificate_key ciika.com.key;
重启后即可访问
测试tls的支持情况
Verify that TLS v1.2 is supported: openssl s_client -tls1_2 -connect ciika.com:443 < /dev/null
Verify that TLS v1.1 is not supported: openssl s_client -tls1_1 -connect ciika.com:443 < /dev/null
Verify that TLS v1.0 is not supported: openssl s_client -tls1 -connect ciika.com:443 < /dev/null
如果nginx重启每次都需要密码,可以重新生成一个key并且使用
openssl rsa -in ciika.key -out ciika.key.unsecure
在nginx里面把实际使用的tls协议打印出来看看
log_format combined_ssl '$remote_addr - $remote_user [$time_local] '
'$ssl_protocol/$ssl_cipher '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
参考:
https://blog.myssl.com/ssl-and-tls-deployment-best-practices/
https://askubuntu.com/questions/319192/how-to-enable-tls-1-2-in-nginx
https://serverfault.com/questions/671983/how-to-disable-tlsv1-0-and-tlsv1-1-in-nginx
http://www.wxapp-union.com/article-1085-1.html
https://mp.weixin.qq.com/s/jNj_uEkV8KZQQWJny7yvzg
**反向代理是一个服务器,它接收通过Web发出的请求,即http和https,然后将它们发送到后端服务器(或服务器)。后端服务器可以是单个或一组应用服务器,**如Tomcat,wildfly或Jenkins等,或者甚至可以是其他Web服务器,如Apache等。
我们已经讨论过如何使用Nginx配置简单的http反向代理。在本教程中,我们将讨论如何使用SSL配置Nginx反向代理。因此,让我们从使用SSL配置Nginx反向代理的过程开始
后端服务器:为了本教程的目的,我们使用在端口8080的localhost上运行的tomcat服务器
注意: - 当您开始代理请求时,请确保应用程序服务器已启动。
SSL证书:我们还需要在服务器上配置SSL证书。我们可以使用 let’s encrypt的加密证书,你可以使用这里提到的程序得到一个。但是对于本教程,我们将使用自签名证书,可以通过从终端运行以下命令来创建,
$ openssl req …
使用ssl配置nginx反向代理的下一步将是nginx安装,
Nginx可用于默认的Ubuntu存储库。这么简单,使用以下命令安装它,
$ sudo apt-get update &&sudo apt-get install nginx
现在启动服务并启用它以进行启动,
# systemctl start nginx
# systemctl enable nginx
现在检查nginx安装,我们可以打开Web浏览器并输入系统IP作为url以获取默认的nginx网页,这确认nginx工作正常。
现在我们拥有了使用ssl配置nginx反向代理所需的所有东西。我们现在需要在nginx中进行配置,我们将使用默认的nginx配置文件,即/etc/nginx/conf.d/default.conf.
假设这是我们第一次对配置进行任何更改,打开文件并删除或注释所有旧文件内容,然后将以下条目放入文件中。
vi /etc/nginx/conf.d/default.conf
完成所有更改后,保存文件并退出。在我们重新启动nginx服务以实现所做的更改之前,我们将逐节讨论我们所做的配置。
第1节
在这里,我们告诉我们要听取对端口80的任何请求,然后将其重定向到https。
第2节
现在这些是我们正在使用的一些默认的nginx ssl选项,它们告诉nginx web服务器支持哪种协议版本,SSL密码。
第3节
现在,本节介绍代理以及传入请求进入后的位置。现在我们已经讨论了所有配置,我们将检查然后重新启动nginx服务。
要检查nginx,请运行以下命令
# nginx -t
一旦我们所有配置文件都ok,我们将重新启动nginx服务
# systemctl restart nginx
就是这样,我们的ssl nginx反向代理现已准备就绪。现在要测试设置,您所要做的就是打开Web浏览器并输入URL。我们现在应该重定向到apache tomcat网页。
这完成了我们如何使用ssl配置nginx反向代理的教程,请使用下面的注释框发送有关本教程的任何问题或疑问。
参考链接 :
nginx使用godaddy的ssl证书 :http://ciika.com/page/14/
Nginx 配置SSL证书教程 :https://www.jianshu.com/p/65b8ec8b4f20
使用SSL配置Nginx反向代理的简单指南 https://mp.weixin.qq.com/s/jNj_uEkV8KZQQWJny7yvzg