start ssl证书申请及nginx的https配置,已经配了N次了,对那些步骤都搞烂了,但最近的工作中却让我为之痛苦了2天,跟我最大的感觉就是,要专业就看专业的文章,不专业的讲解,只会误导新手,当初犯的错,早晚要用痛苦来弥补,下面给出自己的血的教训,请童鞋们谨记吧。
公司要搞加密的http传输,说明该业务对安全方面要求较高,业内一般都是两种做法,一种是用免费的start sll这样的证书,支持大多数个别版本的浏览器。 另一种是购买收费的ssl证书,机构很多,自行查找。 根据自己的经验,两种情况适用于不同的业务形态,第一种适用于对安全度要求较低,切用户看不到界面的应用,比如接口等。因为免费的不保证所有用户的所有浏览器都能够成功认证。 第二种适用于对安全要求较高,切用户能看到的界面的,影响用户体验的业务,比如登陆、注册、支付等应用场景。
购买的就不说了,供应商拿钱会告诉你一切的,下面总结下免费的证书申请及nginx配置等;
本地生成ssl-key
第一: 进入到nginx的配置文件目录
cd /usr/local/nginx/conf
第二:生成证书的key文件
openssl genrsa -des3 -out server.key 1024
(注意:此处会让你输入密码,一定要记住次密码)
第三:配置key文件的一些信息openssl req -new -key server.key -out server.csr
(其中会用到上一步的密码)
第四: 分别输入以下命令$ cp server.key server.key.org $ openssl rsa -in server.key.org -out server.key
拿着生成的key文件内容去startssl官网申请crt证书
这一步已经与很多成熟的博客做过总结了,给出自己觉得不错的博客地址,大家参考一下,有问题请留言。
地址:http://www.chinaz.com/free/2010/1111/142581_2.shtml
拿到crt文件后,接下来是nginx的配置文件配置了
不多说,直接上图,则样比较直接
到此为止其实已经配置好了,但是如果你的业务是接口形式的,尔客户端是android手机,那么在集成接口是就会出问题,报证书不存在,而且用php程序和各种浏览器都没问题,这个时候纠结的蛋疼,就是没有好好看start ssl官方文档,而是信了一些人的简单博客,还有新浪微博接口一度也是这样的问题,害的很多程序员都采用默认接收所有证书的方式,其实解决方案很简单,给出官网地址:
http://www.startssl.com/?app=42
因为比较爱国,英文没学好,就不翻译了,比较简单,应该都能看懂,照着上面的步骤操作就ok了。
补充,今天发现服务器https认证又出问题了,于是有深入研究了一下,发现nginx和ssl配合的时候,有些地方还是要注意的,比如按照startssl官网给出的,建议ssl.key文件的权限是600, 还有就是nginx里面ssl_protocols 和 ssl_ciphers 的配置,以及nginx版本的要求。 另外需要注意的是startssl支持的浏览器,比如IE8以上版本都可以完美兼容,IE8会有提示,但是可以打开,一下版本就time out了。
但是对于chrome和firfox是支持的挺完美的,下面给出详细的参考建议:
nginx的ssl服务配置及优化:http://nginx.org/cn/docs/http/configuring_https_servers.html
startssl安装手册:https://www.startssl.com/?app=20