Ubuntu:Nginx创建使用SSL自签名证书

现在很多网站都使用https进行加密通讯及对网络服务器身份的鉴定。这遍文章介绍怎么在Nginx web服务上设置自签名SSL证书。由于不是由权威机构发布的证书,它(自签名证书)不能确认网络服务器身份,但是它可以对通信进行加密。

自签名证书适合个人或公司内部使用,如果要对外提供web服务,最好购买权威机构发布的证书。在github上有一个项目叫Let’s Encrypt,可以使用它签发免费的证书,并且大多数web浏览器都信任它。

系统要求

安装LEMP(Linux, Nginx, MySQL, PHP))

如果你只使用Nginx,可以使用下面命令安装:


创建SSL证书

我们可以创建一个目录用来存放所有SSL相关文件,在/etc/nginx下创建:

创建 SSL密钥和证书文件:

我们来看一看上面命令各个选项的意思:

  • openssl:这是创建和管理OpenSSL密钥、证书和其它文件的命令行工具
  • req:指定使用X.509证书签名要求(CSR)
  • -x509:创建自签名证书,而不生成签名请求
  • -nodes:证书不使用密码,我们需要Nginx能直接读取文件,在重启Nginx时,不用输入密码
  • -days 365::证书的有效时间,这里是一年
  • -newkey rsa:2048:同时生成一个新证书和新密钥,RSA密钥长度:2048位
  • -keyout:密钥生成的路径
  • -out:证书生成的路径

执行上面命令,需要回答一系列问题。其中,最重要的一个问题是Common Name (e.g. server FQDN or YOUR name),输入你的域名。如果没有域名的话,使用ip地址。

问题大似如下:

配置Nginx使用SSL

修改server块(server block设置参考:http://blog.topspeedsnail.com/archives/232):

把your_domain.com替换为你的域名。

编辑your_domain.com:

修改如下:

创建链接:

删除默认的配置:

重启Nginx:

上面设置完成之后,nginx可以同时提供HTTP和HTTPS (SSL)请求。

测试

先使用HTTP访问:

Screen Shot 2016-03-09 at 22.39.19

使用HTTPS访问:

Screen Shot 2016-03-09 at 22.39.09

前面提到过,自签名的证书是不被浏览器信任的,需要手动添加信任;点击I Understand the Risks,会弹出一个对话框,添加信任即可。

Screen Shot 2016-03-09 at 22.45.53

中间部分显示,传输的数据是加密的。

如果你打算在对外网站上使用SSL,你应该购买权威的SSL证书,防止吓人的警告页面把用户吓跑。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注