给Nginx配置一个自签名的SSL证书

转载 2015年11月18日 13:30:24

要保证Web浏览器到服务器的安全连接,HTTPS几乎是唯一选择。HTTPS其实就是HTTP over SSL,也就是让HTTP连接建立在SSL安全连接之上。

SSL使用证书来创建安全连接。有两种验证模式:

  1. 仅客户端验证服务器的证书,客户端自己不提供证书;

  2. 客户端和服务器都互相验证对方的证书。

显然第二种方式安全性更高,一般用网上银行会这么搞,但是,普通的Web网站只能采用第一种方式。

客户端如何验证服务器的证书呢?服务器自己的证书必须经过某“权威”证书的签名,而这个“权威”证书又可能经过更权威的证书签名,这么一级一级追溯上去,最顶层那个最权威的证书就称为根证书。根证书直接内置在浏览器中,这样,浏览器就可以利用自己自带的根证书去验证某个服务器的证书是否有效。

如果要提供一个有效的证书,服务器的证书必须从VeriSign这样的证书颁发机构签名,这样,浏览器就可以验证通过,否则,浏览器给出一个证书无效的警告。

申请一个证书签名的费用是一年几十~几百刀不等,所以如果只是出于管理目的,可以创建自签名证书,保证管理员通过浏览器安全连接到服务器。

下面简单介绍如何创建一个自签名的SSL证书。

创建自签名证书需要安装openssl,使用以下步骤:

  1. 创建Key;

  2. 创建签名请求;

  3. 将Key的口令移除;

  4. 用Key签名证书。

为HTTPS准备的证书需要注意,创建的签名请求的CN必须与域名完全一致,否则无法通过浏览器验证。

以上步骤命令繁琐,所以我做了一个shell脚本,能一次性把证书搞定。从这里下载脚本:

http://download.csdn.net/detail/zhanglong1229/9279387

运行脚本,假设你的域名是www.test.com,那么按照提示输入:

$ ./gencert.sh 
Enter your domain [www.example.com]: www.test.com          
Create server key...
Generating RSA private key, 1024 bit long modulus
.................++++++
.....++++++
e is 65537 (0x10001)
Enter pass phrase for www.test.com.key:输入口令
Verifying - Enter pass phrase for www.test.com.key:输入口令
Create server certificate signing request...
Enter pass phrase for www.test.com.key:输入口令
Remove password...
Enter pass phrase for www.test.com.origin.key:输入口令
writing RSA key
Sign SSL certificate...
Signature ok
subject=/C=US/ST=Mars/L=iTranswarp/O=iTranswarp/OU=iTranswarp/CN=www.test.com
Getting Private key
TODO:
Copy www.test.com.crt to /etc/nginx/ssl/www.test.com.crt
Copy www.test.com.key to /etc/nginx/ssl/www.test.com.key
Add configuration in nginx:
server {
    ...
    ssl on;
    ssl_certificate     /etc/nginx/ssl/www.test.com.crt;
    ssl_certificate_key /etc/nginx/ssl/www.test.com.key;
}

红色部分是输入,注意4次输入的口令都是一样的。

在当前目录下会创建出4个文件:

  • www.test.com.crt:自签名的证书
  • www.test.com.csr:证书的请求
  • www.test.com.key:不带口令的Key
  • www.test.com.origin.key:带口令的Key

Web服务器需要把www.test.com.crt发给浏览器验证,然后用www.test.com.key解密浏览器发送的数据,剩下两个文件不需要上传到Web服务器上。

以Nginx为例,需要在server {...}中配置:

server {
    ...
    ssl on;
    ssl_certificate     /etc/nginx/ssl/www.test.com.crt;
    ssl_certificate_key /etc/nginx/ssl/www.test.com.key;
}

如果一切顺利,打开浏览器,就可以通过HTTPS访问网站。第一次访问时会出现警告(因为我们的自签名证书不被浏览器信任),把证书通过浏览器导入到系统(Windows使用IE导入,Mac使用Safari导入)并设置为“受信任”,以后该电脑访问网站就可以安全地连接Web服务器了:

self-signed-cert

如何在应用服务器中配置证书呢?例如Tomcat,gunicorn等。正确的做法是不配置,让Nginx处理HTTPS,然后通过proxy以HTTP连接后端的应用服务器,相当于利用Nginx作为HTTPS到HTTP的安全代理,这样即利用了Nginx的HTTP/HTTPS处理能力,又避免了应用服务器不擅长HTTPS的缺点。



重要提示:

如果想让http直接重写为https 写俩 server 分别监听 80 和 443 给80的服务 重写 rewrite ^(.*)$  https://$host$1 permanent;

如果俩个都可以访问 就可以写一个server 同时监听 80 443,不要做重写 会导致重复重定向

Nginx自签ssl证书创建及配置方法

场景:Nginx使用自签ssl证书实现https连接。方法:第一步:使用OpenSSL创建证书#建立服务器私钥(过程需要输入密码,请记住这个密码)生成RSA密钥 >openssl genrsa -de...
  • cangzihu
  • cangzihu
  • 2016年12月06日 16:44
  • 4453

Linux+Nginx下SSL证书安装

一.Nginx安装SSL证书需要两个配置文件 1_root_bundle.crt、 2_domainname.com.key。 注:这三个证书文件都在文件夹for Nginx.zip中,例:1_r...
  • u010244140
  • u010244140
  • 2016年03月08日 10:10
  • 3339

Nginx配置ssl证书(中间证书)

在Nginx下配置ssl证书,默认的配置文件,在pc浏览器中正常访问,在手机浏览器中无法认证 一 Nginx配置方式   ssl on; ssl_certificate /...
  • gudufeiyang
  • gudufeiyang
  • 2017年02月28日 16:56
  • 5234

Nginx配置自签名ssl

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 实验环境:ubuntu14.04(阿里云服务器) 首先安装Nginx:...
  • qq_26819733
  • qq_26819733
  • 2016年12月02日 10:13
  • 1679

linux下生成https的crt和key证书

今天在配置kibana权限设置时,kibana要求使用https链接。 于是总结了一下linux下openssl生成 签名的步骤: x509证书一般会用到三类文,key,csr,crt。 ...
  • xuplus
  • xuplus
  • 2016年06月08日 16:12
  • 19219

为nginx配置https并自签名证书

为nginx配置https并自签名证书一、把证书准备好。 步骤与使用OpenSSL自签发服务器https证书所述大同小异。在这里再重复一次。 1、制作CA证书: ca.key CA私钥:open...
  • xizaihui
  • xizaihui
  • 2016年11月15日 22:30
  • 3906

nginx配置ssl证书实现https和http共存访问

由于自己生成的证书不受浏览器信任,所以需要到第三方ssl证书提供商处购买,在购买ssl证书时,需要提供一个自己的web服务器生成的csr密码。 生成csr的步骤: ①:生成RSA密钥:  openss...
  • eclothy
  • eclothy
  • 2015年05月23日 10:29
  • 10735

Nginx配置自签名ssl

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。 实验环境:ubuntu14.04(阿里云服务器) 首先安装Nginx:...
  • qq_26819733
  • qq_26819733
  • 2016年12月02日 10:13
  • 1679

Nginx自签ssl证书创建及配置方法

场景:Nginx使用自签ssl证书实现https连接。方法:第一步:使用OpenSSL创建证书#建立服务器私钥(过程需要输入密码,请记住这个密码)生成RSA密钥 >openssl genrsa -de...
  • cangzihu
  • cangzihu
  • 2016年12月06日 16:44
  • 4453

自签SSL证书实现Nginx配置https双向认证

1.      前期的准备工作: 安装openssl和nginx的https模块 cd ~/ mkdir ssl cd ssl mkdir demoCA cd demoCA ...
  • u014470726
  • u014470726
  • 2017年01月05日 09:32
  • 1562
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给Nginx配置一个自签名的SSL证书
举报原因:
原因补充:

(最多只允许输入30个字)