微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[Linux] PHP程序员玩转Linux系列-Nginx中的HTTPS

PHP程序员玩转Linux系列-Nginx初学者引导

创建一个HTTPS服务器

Nginx.conf配置文件中,在块里面通过指令指定ssl的参数,设置好服务器证书和私钥文件的路径

Highlighter">
rush:bash;gutter:true;">server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

服务器证书是一个公开实体,它会被发送给每一个连接过来的客户端.私钥是一个安全实体,它应该被存储在一个限制权限的文件中.但是Nginx的master进程必须能够读到该私钥文件. 私钥也可以和证书放在一个文件里面.

Highlighter">
rush:bash;gutter:true;">ssl_certificate www.example.com.cert;
ssl_certificate_key www.example.com.cert;

在这个例子里面,文件的访问权限应该被限制.尽管证书和私钥在一个文件里面,只有证书会被发送给客户端.

 指令可以被用来限制连接,只包含高版本的TLS和SSL/TLS的密码

Nginx 1.0.5版本开始,Nginx认使用.从Nginx 1.1.13 和 1.0.12 版本开始,认更新成了 

一个单一的HTTP和HTTPS服务

可以配置一个服务同时支持HTTP和HTTPS请求,在虚拟主机中使用指令,一个带着参数,一个不带参数.

Highlighter">
rush:bash;gutter:true;">server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Nginx 0.7.13和更早的版本中,SSL不能被单独设置监听socket.只能通过ssl指令为全部server开启SSL,才能实现HTTP/HTTPS同时支持.为了解决这一问题,为指令添加参数.因此在0.7.14和之后的版本中,指令不能再用了.  

基于名称的HTTPS服务

一个很普遍的问题出现了,那就是解决当在一个ip地址配置监听两个或多个HTTPS服务.

Highlighter">
rush:bash;gutter:true;">server {
    listen          443 ssl;
    server_name     www.example.com;
    ssl_certificate www.example.com.crt;
    ...
}

server {
listen 443 ssl;
server_name www.example.org;
ssl_certificate www.example.org.crt;
...
}

使用这个配置,浏览器只能接收到认的证书,在这个例子中就是www.example.com证书.这个是因为SSL协议本身造成的.SSL的连接是在浏览器发送HTTP请求之前建立的,因此Nginx不知道请求的名称.所以它只能提供认服务的证书.

解决这一问题最好的方式是分配不同的IP地址给每一个HTTPS服务

Highlighter">
rush:bash;gutter:true;">server {
    listen          192.168.1.1:443 ssl;
    server_name     www.example.com;
    ssl_certificate www.example.com.crt;
    ...
}

server {
listen 192.168.1.2:443 ssl;
server_name www.example.org;
ssl_certificate www.example.org.crt;
...
}

  

使用多个名称生成SSL证书

这里有其他的方式解决上面的问题,但是每一种都有各自的缺点.一种方式是生成证书的时候更改字段,比如:  两个,但是这个字段有长度限制.

另一种方式是证书名称那里使用通配符,比如: ,但是 通配名称只能用在一级子域名上.这个名称可以匹配,但是不能匹配 

这两种方式可以结合起来,在字段里填上 

最好把多域名证书和私钥放在配置http块中,这样所有的服务都可以继承这个配置

Highlighter">
rush:bash;gutter:true;">ssl_certificate     common.crt;
ssl_certificate_key common.key;

server {
listen 443 ssl;
server_name www.example.com;
...
}

server {
listen 443 ssl;
server_name www.example.org;
...
}

  

原文地址:https://www.jb51.cc/linux/69095.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐