PHP程序猿玩转Linux体系

2019-05-03 22:43 来源:未知

一.PHP技士玩转Linux体系-怎么设置使用CentOS

编译自:
[configuring_https_servers][1]
[1]: http://nginx.org/en/docs/http/configuring_https_servers.html

2.PHP技术员玩转Linux连串-lnmp蒙受的搭建

目录

叁.PHP工程师玩转Linux种类-搭建FTP代码开荒情形

  • 简介
  • HTTPS 服务器优化
  • SSL 证书链
  • 一个 HTTP/HTTPS 服务器
  • Name-based HTTPS 服务器
    • 七个 server 共享一个 SSL 证书
    • Server Name Indication
  • 兼容性

4.PHP技士玩转Linux连串-备份还原MySQL

简介


布署 HTTPS 服务,必须为 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 主进度必须对其有读权限。私钥可以和证书存放在同3个文件中:

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

本条文件当然也应有加上严苛的权能设置。尽管证书和私钥被寄放在同2个文件中,但只有证书会被发送给客户端。

使用 ssl_protocols 指令 和 ss_chiphers 指令,可设置加密源源不断使用高安全性的情商版本以及加密性强的算法(SSL/TLS协议)。nginx 私下认可使用 “ssl_protocols TLSv1 TLSv1.1 TLSv1.2” 以及 “ssl_ciphers HIGH:!aNULL:!MD五”,它们各自钦点了暗许的商业事务版本和加密算法,所以这一个算法无需显式地钦定。要留心的是,那多少个指令的私下认可值已经一连生出转移(详见 “包容性” 小节)。

[listen][2] 指令
[2]: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

[server][3] 指令
[3]: http://nginx.org/en/docs/http/ngx_http_core_module.html#server

[server certificate][4] 指令
[4]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate

[private key][5] 指令
[5]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate_key

[ssl_protocols][6] 指令
[6]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols

[ss_chiphers][7] 指令
[7]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_ciphers

五.PHP程序猿玩转Linux体系-自动备份与SVN

HTTPS 服务器优化


处理 SSL 连接会消耗额外的 CPU 能源。在多管理器系统上,应安装对应CPU主旨个数的 worker 进度。(参考:worker_processes)

建立 SSL 连接的拉手阶段是最消耗 CPU 的,有二种艺术可最小化建构每一个 SSL 连接所须要的握手操作次数:

  • 第2是启用 keepalive 连接保持。运行连接保持,可以在三个已成立的 SSL 连接上拍卖八个请求
  • 其次是录取 SSL 会话参数,使互相的要么三番五次的总是不再要求举办 SSL 握手。

SSL 连接的对话参数被封存在 SSL 会话缓存中,该缓存被有着的 worker 进度共享,可选取 ssl_session_cache 指令对其张开布署。1MB SSL 会话可容纳约 四千 个会话。

暗许的缓存超时为 伍 分钟,可使用 ssl_session_timeout 指令展开调解。

上边是3个 SSL 优化安插样例,尽管系统具有的 CPU 大旨总的数量为 10个,为其配置 十 MB 的共享会话缓存:

worker_processes auto;

http {
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;

    server {
        listen              443 ssl;
        server_name         www.example.com;
        keepalive_timeout   70;

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

[ssl_session_cache][9]
[9]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache

[ssl_session_timeout][10]
[10]: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_timeout

六.PHP技术员玩转Linux连串-Linux和Windows安装nginx

SSL 证书链


神迹相会世那样的状态,对三个由盛名 CA 签发的证件,一些浏览器发出警示,而另一些浏览器会接受。那是因为签发该证件的 CA 使用了1个 intermediate certificate 签发证书,那么些 intermediate certificate 未有包罗在跟随浏览器联合分发的证书库中。为应对这些主题素材,CA 提供了 a bundle of chained certificate ,可将该证件与你的服务器证书合并成3个文本。在这几个文件中,服务器的证件必须放在 chained certificate 的前边:

$ cat www.example.com.crt bundle.crt > www.example.com.chained.crt

采用它看成 ssl_certificate 指令的参数:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

纵然每个颠倒了,把服务器证书放在了 chained certificate 的末尾,nginx 不可能学有所成运转,并且显示如下错误音讯:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
   (SSL: error:0B080074:x509 certificate routines:
    X509_check_private_key:key values mismatch)

那是因为 nginx 开采服务器的私钥和 chained certificate 的率先个证件不配合造成的。

当浏览器收到 intermediate certificates 时,一般都会将它存款和储蓄下来。所以浏览器大概在率先次接到 intermediate certificates 时发出警示,但存款和储蓄下来以往再一次接到时就不会发生警示了。

要规定3个 web 服务器是或不是发送了完整的 certificate chain,可使用 openssl 命令:

$ openssl s_client -connect www.godaddy.com:443
...
Certificate chain
 0 s:/C=US/ST=Arizona/L=Scottsdale/1.3.6.1.4.1.311.60.2.1.3=US
     /1.3.6.1.4.1.311.60.2.1.2=AZ/O=GoDaddy.com, Inc
     /OU=MIS Department/CN=www.GoDaddy.com
     /serialNumber=0796928-7/2.5.4.15=V1.0, Clause 5.(b)
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.
     /OU=http://certificates.godaddy.com/repository
     /CN=Go Daddy Secure Certification Authority
     /serialNumber=07969287
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc.
     /OU=http://certificates.godaddy.com/repository
     /CN=Go Daddy Secure Certification Authority
     /serialNumber=07969287
   i:/C=US/O=The Go Daddy Group, Inc.
     /OU=Go Daddy Class 2 Certification Authority
 2 s:/C=US/O=The Go Daddy Group, Inc.
     /OU=Go Daddy Class 2 Certification Authority
   i:/L=ValiCert Validation Network/O=ValiCert, Inc.
     /OU=ValiCert Class 2 Policy Validation Authority
     /CN=http://www.valicert.com//emailAddress=info@valicert.com
...
Server certificate
-----BEGIN CERTIFICATE----- 
...

在此例中的 Certificate chain 中,#0号证书的对象 (“s”) 的证书颁发者是 (“i”),#0证书的 (“i”) 同时又是 #www.weide1946.com ,1 号证书的靶子 (“s”);#一号证书颁发者 (“i”) 是 #二号证书的目的 (“s”),#2号证书的颁发者 (“i”) 是远近盛名 CA “ValiCert, Inc”,这几个 CA 的证书是储存在随浏览器分发的内建证书库中的。

只要服务器发送给客户端的阐明未有包罗 certificate chain,下面的消息只会来得 #0 号服务器证书。

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

一个 HTTP/HTTPS 服务器


创建1个可同时管理 HTTP 和 HTTPS 请求的 web 服务器:

server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Note:
nginx 0.7.14 版之前,不支持像上面这样单独将某个监听套接字设置为 SSL 连接。
只能在 server 区块中使用 ssl {on|off} 指令,定义整个 server 提供 HTTPS 服务,
因此不能设置可同时处理 HTTP/HTTPS 请求的 server 区块。现在不建议在新版本的 nginx 
中使用 ssl 指令,建议使用 ssl 参数。

 

Name-based HTTPS 服务器


据他们说名称的 HTTPS 服务器。

子目录

  • 概念讲明
  • 七个 server 共享叁个 SSL 证书
  • Server Name Indication

创立四个HTTPS服务器

概念疏解


怎么样设置监听于1个 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;
    ...
}

即便在那样的布局中为三个 server 设置了分歧的注明,然而当使用浏览器访问该 web 站点时,无论访问的主机名是 www.example.com 还是 www.example.org,浏览器都将收受同一个服务器证书:服务器的暗中认可证书。在此处的默许证书是 www.example.com.crt。

那是由 SSL 钻探的行为所主宰的。SSL 连接创建于 TCP/IP 连接之上,SSL 连接在握手的阶段,会接受由 nginx 服务器发送的服务器证书,SSL 连接建完了之时,浏览器还尚未发送 HTTP 请求给 nginx,因而 nginx 无法在确立 SSL 连接时获知浏览器所请求的是哪1个虚拟主机,因而,nginx 只好发送默许的服务器证书给浏览器。

对此那一个难题,最老的主意,也是最 robust 的秘籍,是为各样 HTTPS 服务设置独立的 IP 地址:

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

 

四个 server 共享1个 SSL 证书


有种种方法可落成在七个 HTTPS servers 之间共享三个 IP 地址,但这几个艺术都有分别的症结。

一种形式是在表明的 SubjectAltName 字段中安装多少个主机名,例如设置七个主机名:www.example.com 和 www.example.org。缺点是 SubjectAltName 字段的长度是有限制的。

另一种艺术是在声明中安装“通配主机名”,举例 *.example.org,但它不得分歧盟贰个名字区域的主机名,举个例子,它不能够相配 example.org 和 www.sub.example.org。

上述二种艺术能够构成使用,也正是在评释的 SubjectAltName 字段中并且含有五个 “正确主机名” 和 “通配主机名”。举例同时涵盖:example.org 和 *.example.org。

对此那种在四个 HTTPS servers 之间共享两个 IP 地址的行使场景,最棒在布署中,将服务器的证件和私钥放到 http 区块中,使得全数的 server 区块可继续该配置:

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

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

Server Name Indication


对此落成在多少个 HTTPS servers 之间共享3个 IP 地址,可能说基于同1个 IP 地址运行多少个 HTTPS server,一种特别通用的化解方案是运用 TLS Server Name Indication extension (SNI, 福特ExplorerFC 606陆)。

通过 SNI 可允许浏览器在与 web 服务器进行 SSL 握手的阶段,将所请求的 server name 传递给服务器,那样服务器就可见为那个 SSL 连接选拔相应的评释。

不过 SNI 对浏览器的版本有供给,近日支撑 SNI 的浏览器版本如下:

Opera 8.0;
MSIE 7.0 (but only on Windows Vista or higher);
Firefox 2.0 and other browsers using Mozilla Platform rv:1.8.1;
Safari 3.2.1 (Windows version supports SNI on Vista or higher);
and Chrome (Windows version supports SNI on Vista or higher, too).

Note:
在 SNI 中只能传递 domain names(域名)。如果一个访问请求中包含有 IP 地址,
一些浏览器会错误地将服务器的 IP 地址当做所请求的主机名传递给服务器。因此,不能
完全依赖 SNI。

为了在 nginx 中央银行使 SNI,须要三种函数库帮忙 SNI:壹是 nginx 编写翻译时使用的 OpenSSL 库,贰是 nginx 在运维时动态链接的库。OpenSSL 从 0.九.八f 版开首支持 SNI(要求 OpenSSL 在编写翻译时选用了 “--enable-tlsext” 选项)。从 0.九.8j 版发轫,该选用是私下认可的选项。要是 nginx 编写翻译进了对 SNI 的援助,那么使用 nginx -V 命令查看时,可知到:

$ nginx -V
...
TLS SNI support enabled
...

屈居译者的测试:

[root@lamp1 ~]# nginx -V
nginx version: nginx/1.10.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
...

设若 SNI-enabled nginx 动态链接不帮衬 SNI 的 OpenSSL 库,nginx 将体现如下警告:

nginx was built with SNI support, however, now it is linked
dynamically to an OpenSSL library which has no tlsext support,
therefore SNI is not available
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;
    ...
}

兼容性


从 0.八.二一 和 0.7.6二 开首,可利用 nginx -V 突显 SNI 协理状态消息。

从 0.7.1四 开头,nginx 援救在 listen 指令中应用 ssl 参数,而且在 0.八.二1以前,ssl 参数只可以和 default 参数一齐行使。

从 0.伍.3二 开始帮衬 SNI。
从 0.5.陆 起始辅助 SSL 会话缓存。

从 1.9.1 开始,默认的 SSL 协议为 TLSv1, TLSv1.1, and TLSv1.2 (if supported by the OpenSSL library)
从 0.7.65, 0.8.19 开始,到 1.9.1 之前,默认的 SSL 协议为 SSLv3, TLSv1, TLSv1.1, and TLSv1.2 (if supported by the OpenSSL library)。
0.7.64, 0.8.18 及之前,默认的 SSL 协议为 SSLv2, SSLv3, and TLSv1。

从 1.0.5 开端,默许的 SSL 加密算法为 “HIGH:!aNULL:!MD5”。
0.七.陆5, 0.八.20 之后,一.0.5 以前,默许的 SSL 加密算法为 “HIGH:!ADH:!MD5”。
0.八.1玖: 暗中同意的 SSL 加密算法为 “ALL:!ADH:RC4 RSA: HIGH: MEDIUM”。
0.7.6四, 0.捌.18 及在此之前,暗许的 SSL 加密算法为 “ALL:!ADH:RC4 RSA: HIGH: MEDIUM: LOW: SSLv2: EXP”。

written by Igor Sysoev
edited by Brian Mercer


版权消息
本文编译自 nginx.org 的部分,听从其原来的 licence 申明: 2-clause BSD-like license

服务器证书是2个当着实体,它会被发送给每叁个接二连三过来的客户端.私钥是三个安全实体,它应当被贮存在三个限量权力的文件中.可是nginx的master进程必须能够读到该私钥文件. 私钥也能够和证书放在1个文书里面.

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

在那个例子里面,文件的造访权限应该被限制.尽管证书和私钥在三个文件之中,唯有证件会被发送给客户端.

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

从nginx 一.0.五版本发轫,nginx暗许使用ssl_protocols SSLv3 TLSv1和ssl_ciphers HIGH:!aNULL:!MD5.从nginx 一.一.一三 和 一.0.1二 版本伊始,暗许更新成了 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2 

 

一个单一的HTTP和HTTPS服务

可以布置1个服务同时协理HTTP和HTTPS请求, 在虚拟主机中使用listen指令,贰个带着ssl参数,3个不带参数.

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.1三和更早的版本中,SSL不能够被单独设置监听socket.只好因此ssl指令为全方位server开启SSL,才干完成HTTP/HTTPS同时帮助.为了解决这一难点,为listen指令增多了ssl参数.因而在0.7.1四和之后的版本中,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 多少个,不过这几个字段有长度限制.

另1种方法是证书名称这里使用通配符,举个例子: *.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;
    ...
}

  

 

版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于网络编程,转载请注明出处:PHP程序猿玩转Linux体系