创建并部署自签名的 SSL 证书到 Nginx
2016-01-15 15:07
597 查看
自签名的 SSL 证书(self-signed SSL certificate),就是未经过权威第三方认证的 SSL 证书,常常用作测试 https 连接之用。当用户访问使用这种 SSL 证书的网站时,往往会被提示“该网站的 SSL 证书未被认证!”。使用 CloudFlare 的 CDN 加速可以解决这个问题,CloudFlare 可以将你的网站的内容缓存到其分布全球的 CDN 节点上,而当用户访问你的网站时,CloudFlare
会将已经缓存的网站内容以 https 的传输方式发送到用户的浏览器,这时使用的 SSL 证书是 CloudFlare 的 SSL 证书,是经过第三方权威认证的证书。而 CloudFlare 抓取你的网站内容时并不会验证你的网站 SSL 证书是否经过权威第三方认证。这对于那些对于 SSL 证书不是特别了解仅仅是想做一些尝试的人来说是一个不错的选择。
首先,确认系统中安装了 openssl:
如果系统中已经安装了 openssl,当执行这条命令后,终端会返回一条 openssl 命令的路径,如果提示未安装,可以使用系统中安装的包管理软件来安装。对于 Ubuntu 系统:
接下来,我们先生成一个名为“ssl.key”的 RSA key文件:
执行完这两条命令后,当前目录下应该新增了两个文件:ssl.pass.key 和 ssl.key,ssl.pass.key 是为了生成 ssl.key 产生的中间文件,此时已经不再被需要,可以删除:
接着,利用已经生成的 ssl.key 文件,进一步生成 ssl.csr 文件:
执行此行命令会提示输入密码,按回车即可,因为前面我们在生成 ssl.key 时选择了密码留空。
最后我们利用前面生成的 ssl.key 和 ssl.csr 文件来生成 ssl.crt 文件,也就是自签名的 SSL 证书文件:
这一步之后,我们得到一个自签名的 SSL 证书文件 ssl.crt,有效期为 365 天。此时,ssl.csr 文件也已经不再被需要,可以删除掉了:
通过 FTP 或者 SFTP 等协议将我们在本地生成的 ssl.key 和 ssl.crt 文件上传到 /etc/nginx/ssl 目录下(我们也可以直接在 Nginx 运行的服务器上进行上一步生成 SSL 证书的操作,这样就省去了从本地上传到服务器的操作)。修改对应 Nginx 中网站的配置文件,如下:
其中第四行 return 301 https://$server_name$request_uri; 是将所有指向该网站的 http 链接自动重定向到 https 链接,从而避免了 404 错误。
配置文件修改完毕后,重启 Nginx 服务:
此时,直接使用 https 协议访问你的网站时会提示“网站证书不被信任”错误。别忘了开启 CloudFlare 的 CDN 服务,并在 CloudFlare 后台开启 SSL 功能。
会将已经缓存的网站内容以 https 的传输方式发送到用户的浏览器,这时使用的 SSL 证书是 CloudFlare 的 SSL 证书,是经过第三方权威认证的证书。而 CloudFlare 抓取你的网站内容时并不会验证你的网站 SSL 证书是否经过权威第三方认证。这对于那些对于 SSL 证书不是特别了解仅仅是想做一些尝试的人来说是一个不错的选择。
创建自签名 SSL 证书
创建自签名的 SSL 证书需要用到 openssl,在 Windows,Mac OS X,以及 Linux 平台上都可以安装使用 openssl,在这里以 Linux 系统为例,一般来说 openssl 被默认安装在各大 Linux 发行版当中。首先,确认系统中安装了 openssl:
which openssl
如果系统中已经安装了 openssl,当执行这条命令后,终端会返回一条 openssl 命令的路径,如果提示未安装,可以使用系统中安装的包管理软件来安装。对于 Ubuntu 系统:
sudo apt-get install openssl
接下来,我们先生成一个名为“ssl.key”的 RSA key文件:
openssl genrsa -des3 -passout pass:x -out ssl.pass.key 2048
openssl rsa -passin pass:x -in ssl.pass.key -out ssl.key
执行完这两条命令后,当前目录下应该新增了两个文件:ssl.pass.key 和 ssl.key,ssl.pass.key 是为了生成 ssl.key 产生的中间文件,此时已经不再被需要,可以删除:
rm ssl.pass.key
接着,利用已经生成的 ssl.key 文件,进一步生成 ssl.csr 文件:
openssl req -new -key ssl.key -out ssl.csr
执行此行命令会提示输入密码,按回车即可,因为前面我们在生成 ssl.key 时选择了密码留空。
最后我们利用前面生成的 ssl.key 和 ssl.csr 文件来生成 ssl.crt 文件,也就是自签名的 SSL 证书文件:
openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key -out ssl.crt
这一步之后,我们得到一个自签名的 SSL 证书文件 ssl.crt,有效期为 365 天。此时,ssl.csr 文件也已经不再被需要,可以删除掉了:
rm ssl.csr
部署自签名的 SSL 证书到 Nginx
在这里我们仍然假设 Nginx 服务器运行在 Linux 系统之上。我们在 /etc/nginx 目录下创建 ssl 文件夹用以保存相关 SSL 证书文件:sudo mkdir /etc/nginx/ssl
通过 FTP 或者 SFTP 等协议将我们在本地生成的 ssl.key 和 ssl.crt 文件上传到 /etc/nginx/ssl 目录下(我们也可以直接在 Nginx 运行的服务器上进行上一步生成 SSL 证书的操作,这样就省去了从本地上传到服务器的操作)。修改对应 Nginx 中网站的配置文件,如下:
server { listen 80; server_name 你的域名; return 301 https://$server_name$request_uri; } server { listen 443 ssl spdy; server_name 你的域名; ssl_certificate /etc/nginx/ssl/ssl.crt; ssl_certificate_key /etc/nginx/ssl/ssl.key; ssl_session_cache shared:SSL:20m; ssl_session_timeout 60m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #其他配置内容 }
其中第四行 return 301 https://$server_name$request_uri; 是将所有指向该网站的 http 链接自动重定向到 https 链接,从而避免了 404 错误。
配置文件修改完毕后,重启 Nginx 服务:
service nginx restart
此时,直接使用 https 协议访问你的网站时会提示“网站证书不被信任”错误。别忘了开启 CloudFlare 的 CDN 服务,并在 CloudFlare 后台开启 SSL 功能。
相关文章推荐
- nginx 日志切割
- Nginx中文参考手册
- nginx拦截源站404错误
- haproxy后端nginx取得用户访问ip地址
- nginx 301 302跳转配置方法 与 总结
- Linux下nginx编译安装教程和编译参数详解
- nginx的安装
- nginx+gunicorn+virtualenv部署django项目
- nginx模块开发-增加nginx内置变量
- nginx屏蔽IP
- nginx的proxy_cache做网站缓存
- nginx负载均衡配置
- .nginx的虚拟主机功能(nginx多站点,绑定多个域名)
- nginx rewrite 指令
- Nginx常用命令
- nginx location匹配规则
- 运行和控制Nginx
- nginx基本配置与参数说明
- Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】
- 长连接与nginx