红联Linux门户
Linux帮助

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

发布时间:2016-06-24 10:53:58来源:topspeedsnail.com作者:斗大的熊猫

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

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


系统要求

安装LEMP(Linux, Nginx, MySQL, PHP)):http://www.linuxdiyf.com/linux/20461.html

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

$ sudo apt-get update
$ sudo apt-get install nginx


创建SSL证书

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

$ sudo mkdir /etc/nginx/ssl

创建 SSL密钥和证书文件:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

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

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地址。

问题大似如下:

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:hainan
Locality Name (eg, city) []:sanya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:topspeedsnail.
Organizational Unit Name (eg, section) []:topspeedsnail
Common Name (e.g. server FQDN or YOUR name) []:your_domain.com
Email Address []:admin@your_domain.com


配置Nginx使用SSL

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

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/your_domain.com

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

编辑your_domain.com:

$ sudo vim /etc/nginx/sites-available/your_domain.com

修改如下:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
root /usr/share/nginx/html;
index index.html index.htm;
server_name your_domain.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
try_files $uri $uri/ =404;
}
}

创建链接:

$ sudo ln -s /etc/nginx/sites-available/your_domain.com /etc/nginx/sites-enabled/

删除默认的配置:

$ sudo rm /etc/nginx/sites-enabled/default

重启Nginx:

$ sudo service nginx restart

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


测试

先使用HTTP访问:

http://server_domain_or_IP

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

使用HTTPS访问:

https://server_domain_or_IP

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

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

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

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


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


本文永久更新地址:http://www.linuxdiyf.com/linux/21794.html