Nginx服务器安装SSL证书实现Https访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq877507054/article/details/86490562

Https介绍

https的作用和原理及为什么要使用https请参考这篇文章

http://blog.51cto.com/11883699/2160032

基本作用是有HTTPS的时候,所有的数据传输都会被加密,你和网站之间的数据交流也就更加安全。

如果要启用HTTPS,我们就需要从证书授权机构处获取一个证书

HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构又称CA机构。

(具体介绍CA机构请查看百度百科https://baike.baidu.com/item/CA中心/6471855?fr=aladdin)

 

因此,一个到某网站的HTTPS连接可被信任,当且仅当:

 

•用户相信他们的浏览器正确实现了HTTPS且安装了正确的证书颁发机构;

•用户相信证书颁发机构仅信任合法的网站;

•被访问的网站提供了一个有效的证书,意即,它是由一个被信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告);

•该证书正确地验证了被访问的网站(如,访问https://example.com时收到了给example.com而不是其它组织的证书);

•或者互联网上相关的节点是值得信任的,或者用户相信本协议的加密层(TLS或SSL)不能被窃听者破坏。

 

服务器设置

要使一网络服务器准备好接受HTTPS连接,管理员必须创建一数字证书,并交由证书颁发机构签名以使浏览器接受。证书颁发机构会验证数字证书持有人和其声明的为同一人。浏览器通常都预装了证书颁发机构的证书,所以他们可以验证该签名。

申请证书:

在我所知的可以申请的两个平台一个是阿里云,一个是腾讯云,因为我首先接触的是阿里云,就以阿里云为例讲解

阿里云列出的几个大的CA机构有

  1. GeoTrust是全球第二大数字证书颁发机构,已被Symantec收购。该品牌证书由工信部许可设立的电子认证服务机构“天威诚信”提供鉴证服务。

 

  1. 赛门铁克(Symantec)是 SSL/TLS 证书的领先提供商,为全球一百多万台网络服务器提供安全防护。该品牌证书由工信部许可设立的电子认证服务机构“天威诚信”提供鉴证服务。

 

  1. GMO GlobalSign是全球最早的数字证书认证机构之一,一直致力于网络安全认证及数字证书服务,是一个备受信赖的 CA 和 SSL 数字证书提供商。

 

4.中国金融认证中心(CFCA)证书,由中国数字证书认证机构自主研发,纯国产证书。

 

选择赛门铁克------通配符DV型证书----前往售卖页面

注:免费的仅限于个人及测试使用,

1.申请信息填写

2.验证信息填写

验证信息这一步需要在你的域名解析下增加一个记录,依照上述证书申请信息填写

Nginx部署

验证通过后就可以部署到服务器了,这里以nginx为例讲解

官方教程:

https://help.aliyun.com/knowledge_detail/95491.html?spm=5176.2020520154.cas.25.738956a7D32kaa

 

nginx下载后的证书包含两个

不明白证书后缀的含义请参考

https://blog.csdn.net/u011001084/article/details/54708258

https://www.pianyissl.com/support/page/7

下面进入正式的服务器部署阶段,如果你对linux服务器熟悉其实也很简单

 

我的nginx安装目录是/usr/local/nginx,

在conf下的新建cert文件夹把上述下载的证书上传并改名

20190114.key(私钥),20190114.pem(公钥)

修改conf下的nginx.conf配置,完整配置如下,着重看两个server配置,需要你改动的是你的服务名,证书名

worker_processes  1;
error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
 
 


 
http {
    include       mime.types; 
    default_type  application/octet-stream; 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  logs/access.log  main;
    sendfile        on;  
    keepalive_timeout  65;
    gzip  on;
	
	
	server {#用户输入http自动转到https
		listen 80;
		server_name cgfytop.cn;
		rewrite ^(.*) https://$server_name$1 permanent;
	}
	
    server{
		listen      443;
		server_name cgfytop.cn;
		ssl on;#开启ssl
		root html;
		index index.html index.htm;
		ssl_certificate   cert/20190114.pem;#.pem后缀的证书名
		ssl_certificate_key  cert/20190114.key;#.key后缀的证书名
		ssl_session_timeout 5m;
		ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_prefer_server_ciphers on;
		location / {#代理到本地8081端口的tomcat上
			proxy_pass http://localhost:8081;
			client_max_body_size  10m;
       }
    }
   
}

修改后要重启nginx,重启之前需要验证下配置的正确性,这时候问题就开始暴漏了

进入nginx安装目录sbin下,输入命令./nginx -t下发现

配置项”ssl on”验证不通过,因为我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,所以导致这个错误的出现。既然在安装的时候没有编译ssl,难道把nginx卸载重新安装一次?不,我们只需要在原有的基础上添加ssl模块就行了。

看下编译安装nginx的时候,都编译安装的哪些模块。

1.输入命令/usr/local/nginx/sbin/nginx -V

nginx version: nginx/1.12.2

configure arguments:

2.下载相应的nginx源码包放在/usr/local/src下解压,进入解压后的目录执行

./configure --with-http_ssl_module  //重新添加这个ssl模块

 

3.执行以上一条命令出现这个错误(./configure:错误:SSL模块需要OpenSSL库。),原因是因为缺少了OpenSSL,那我们再来安装一个即可执行:yum -y install openssl openssl-devel

 

4.执行./configure,再执行./configure --with-http_ssl_module

 

5.执行make命令,但是不要执行make install,因为make是用来编译的,而make install是安装,不然你整个nginx会重新覆盖的。

 

6.在我们执行完做命令后,我们可以查看到在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序了。首先我们把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可。

               cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

               cp objs/nginx /usr/local/nginx/sbin/nginx

7.最后我们来到Nginx安装目录下,来查看是否有安装ssl模块成功。执行./sbin/nginx -V即可看到如下图:

到此为止,nginx服务器配置工作已经结束,重启nginx,访问https://www.cgfytop.cn,访问失败ヾ(✿゚▽゚)ノ

(重启时尽量不要用./nginx -s reload,使用nginx -s stop关闭后,再开启)

输入netstat -tunlp查看端口占用情况

443和80端口开启

输入curl localhost 也能返回页面信息,说明本地能访问nginx,外部https或http请求却访问失败

查看防火墙中是否开放443端口访问,输入命令firewall-cmd --zone=public --query-port=443/tcp --permanent发现是关闭状态,防火墙这块没过多在意,https访问时被防火墙给拦截了,请求转发不到8081端口,firewall-cmd --zone=public --query-port=8081/tcp --permanent,返回状态no,防火墙开启443端口后就能使用https访问了,

(centos7防火墙命令详情参考https://blog.csdn.net/jeffYang1993/article/details/84334585)

输入https://www.cgfytop.cn

部署完毕

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考资料

http://blog.51cto.com/11883699/2160032

https://blog.csdn.net/weixin_38111957/article/details/81283121

 

 

猜你喜欢

转载自blog.csdn.net/qq877507054/article/details/86490562