当前位置: 首页 > 编程笔记 >

PHP程序员玩转Linux系列 Nginx中的HTTPS详解

阮昊阳
2023-03-14
本文向大家介绍PHP程序员玩转Linux系列 Nginx中的HTTPS详解,包括了PHP程序员玩转Linux系列 Nginx中的HTTPS详解的使用技巧和注意事项,需要的朋友参考一下

PHP程序员玩转Linux系列文章:

1.PHP程序员玩转Linux系列-怎么安装使用CentOS

2.PHP程序员玩转Linux系列-lnmp环境的搭建

3.PHP程序员玩转Linux系列-搭建FTP代码开发环境

4.PHP程序员玩转Linux系列-备份还原MySQL

5.PHP程序员玩转Linux系列-自动备份与SVN

6.PHP程序员玩转Linux系列-Linux和Windows安装nginx

7.PHP程序员玩转Linux系列-nginx初学者引导

创建一个HTTPS服务器

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

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进程必须能够读到该私钥文件. 私钥也可以和证书放在一个文件里面.

ssl_certificate www.example.com.cert;
ssl_certificate_key www.example.com.cert;

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

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

从nginx 1.0.5版本开始,nginx默认使用ssl_protocols SSLv3 TLSv1和ssl_ciphers HIGH:!aNULL:!MD5.从nginx 1.1.13 和 1.0.12 版本开始,默认更新成了 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 

一个单一的HTTP和HTTPS服务

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

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同时支持.为了解决这一问题,为listen指令添加了ssl参数.因此在0.7.14和之后的版本中,ssl指令不能再用了.  

基于名称的HTTPS服务

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

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服务

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证书

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

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

这两种方式可以结合起来,在SubjectAltName字段里填上 example.org 和 *.example.org

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

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;
 ...
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍PHP程序员玩转Linux系列 Linux和Windows安装nginx,包括了PHP程序员玩转Linux系列 Linux和Windows安装nginx的使用技巧和注意事项,需要的朋友参考一下 PHP程序员玩转Linux系列文章: 1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-

  • 整理下自己所学,带动更多的人进入 Linux 世界,特别是做 Java 开发的人学得越多越是明白一个人的力量是不够的,我只是起了一个引子,希望你能一起参与,真心希望! Github 项目地址,欢迎 Fork、Star:https://github.com/judasn/Linux-Tutorial

  • 本文向大家介绍PHP排序算法系列之归并排序详解,包括了PHP排序算法系列之归并排序详解的使用技巧和注意事项,需要的朋友参考一下 归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有

  • 本文向大家介绍php中序列化与反序列化详解,包括了php中序列化与反序列化详解的使用技巧和注意事项,需要的朋友参考一下 把复杂的数据类型压缩到一个字符串中 serialize() 把变量和它们的值编码成文本形式 unserialize() 恢复原先变量 eg: 结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";} Array ( [0] =

  • 本文向大家介绍详解PHP中的序列化、反序列化操作,包括了详解PHP中的序列化、反序列化操作的使用技巧和注意事项,需要的朋友参考一下 数据(变量)序列化(持久化) 将一个变量的数据"转换为"字符串,但并不是类型转换,目的是将该字符串存储在本地。相反的行为成为反序列化。 流程: 具体实例: 1.在xxx1.php中进行序列化操作 2.在xxx2.php中进行反序列化操作 以上就是本文的全部内容,希望对

  • 本文向大家介绍Nginx配置https原理及实现过程详解,包括了Nginx配置https原理及实现过程详解的使用技巧和注意事项,需要的朋友参考一下 使用linux实用工具certbot来生成https证书 这个工具是生成Let's Encrypt证书, Let's Encrypt数字证书认证机构,Let's Encrypt 是由互联网安全研究小组(ISRG,一个公益组织)提供的服务 提供免费的SS