阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 8085阅读
  • 1回复

[解决方案]Apache Httpd 开启 HTTPS 和 HTTP/2

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2017-01-13) —
L&DjNu`!9  
x)*Lu">  
前言 ?/OF=C#  
{o5|(^l  
7JGc9K+Av  
HTTPS 即将在 2017 年获得广泛的普及和支持,这里介绍一下 Apache Httpd 设置 HTTPS 并开启 HTTP/2 (以下会简称 h2)的教程 mA{?E9W  
不过,在目前的条件下,个人还是建议一些强 Apache Httpd 的环境例如 LAMP 可以考虑前面加一层 Nginx,来更灵活的实现 HTTPS + HTTP/2 的新特性,例如目前 Apache Httpd 对 CHACHA20-POLY1305 的算法弄起来就灵活。 -$W1wb9z  
!nSa4U,$w<  
准备 $ uHQl#!;  
}lIc{R@H  
  1. Apache Httpd ≥ 2.4.17 ,Apache Httpd 从 2.4.17 开始支持 mod_http2 ,并且编译时加入 --enable-http2
  2. OpenSSL ≥ 1.0.2 浏览器客户端例如 Chrome 51(2016 年 5 月 31 日发布)之后,已经不支持对没有 ALPN 协议网站的 h2 支持,OpenSSL 1.0.2 起开始支持 ALPN 协议。
  3. nghttp2 ≥ 1.12,其为是基于 C 实现的 HTTP/2 库,为实现 Apache Httpd 支持 h2 所必须
  4. (编译、Win二进制)Apache Httpd ≥ 2.4.25 ,如果是己编译或者 Win 采用二进制编译包的 Apache Httpd 并且开启 mod_http2 支持,版本必须大于 2.4.25,因为之前的版本存在 DDOS 漏洞
*sOb I(&  
P !i_?M  
非编译 v1 8<~  
$KbZ4bB[Bo  
U;#KFZ+~  
u:f ]|Q  
Debian YK6LJv}  
]0."{^ksL  
a2B71RT~  
Debian 在 stretch(9)才有 Apache Httpd(apache2) ≥ 2.4.17 (已经编译 mod_http2 模块)和 OpenSSL ≥ 1.0.2 的支持。
  1. apt-get install apache2 openssl
p[JIH~nb  
aO(PVS|P  
?9()ya-TE  
Ubuntu o6MFMA+vi  
K khuPBd2  
G`zNCx.  
Ubuntu 截止发文,包括 xenial(16.04)和 yakkety(16.10)中的 Apache Httpd(apache2)2.4.18 并没有编译编译 mod_http2 模块,也没提供 mod_http2 的二进制包。 vHf)gi}O|  
不过大神,ondrej 则提供了最新的 Apache Httpd(apache2)和 mod_http2 的二进制包还有 nghttp2 的 PPA 源支持。
  1. add-apt-repository ppa:ondrej/apache2apt-get updateapt-get install apache2 openssl
rJ Jx8)M  
:')[pO_FW*  
>Bb X:  
RHEL、CentOS $XhMI;h  
-x+3nb|.  
W^[FWFUTY  
截止发文切仍受支持的 RHEL、CentOS 5、6、7 均不提供 Apache Httpd(apache2) ≥ 2.4.17 和 OpenSSL ≥ 1.0.2 的支持,也没有提供支持的第三放软件源支持。 请参考下面的 编译 方法。 JJd qdX;  
%XG m\p  
Fedora V O:4wC"7  
n{;Q"\*Sg  
T#Z&*  
截止发文,最新的 Fedora 25 版本,已经提供 Apache Httpd(apache2) ≥ 2.4.17 (已经编译 mod_http2 模块)和 OpenSSL ≥ 1.0.2 的支持,可以放心使用。
  1. dnf install httpd openssl
>}V?GK36  
KQPu9f9  
- Z,Qj"V  
启用 mod_http2 模块 <IZt]P  
b)I-do+  
5!F;|*vC8  
终端中输入: !1)aie+p6  
  1. a2enmod http2 # 启用 mod_http2 模块
  2. service httpd restart # RHEL、CentOS、Fedora
  3. service apache2 restart # Debian、Ubuntu
5*%Gh&)  
m;dwt1'Zw  
M1kA-Xr  
编译 |'?vlUCd  
+yP!7]  
0VNLhM(LM  
1tNL)x"w  
核心组件依赖 jo:Z  
DO: ,PZX  
[font=-apple-system, BlinkMacSystemFont, &quot]适合 Ubuntu 16.04 or later 和 Debian 9 or later #3rS{4[  
  1. apt-get installl nghttp2 libnghttp2-dev openssl #Debian、Ubuntu
  2. 未来或许可以用
  3. yum install nghttp2 libnghttp2-dev openssl #RHEL、CentOS
Bg~]u+c*  
N1~bp?$1  
}:#WjH^  
核心组件不依赖 AY/.vyS  
(TT=i  
D^6*Cwb  
 \(\a=  
OpenSSL '3>;8(s l  
z(\a JW  
  1. wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
  2. tar xzf openssl-1.1.0c.tar.gz
  3. cd openssl-1.1.0c
  4. ./config --prefix=/usr/local/openssl
  5. make && make install
ps{4_V-3u  
]@$^Ju,  
; JkSZs3  
nghttp2 @Go_5X(  
WN'AQ~qA  
  1. wget https://github.com/nghttp2/nghttp2/releases/download/v1.17.0/nghttp2-1.17.0.tar.gz
  2. tar xzf nghttp2-1.17.0.tar.gz
  3. cd nghttp2-1.17.0
  4. ./configure --prefix=/usr/local/nghttp2
  5. make && make install
?J:w,,4m  
P~\rP6 ;  
I0}.!  
编译 Apache Httpd +_]Ui| l  
jR/Gd01)  
uuY^Q;^I*  
在原来的编译参数上加入如下参数: PF~@@j  
  1. –enable-http2
W[&nQW$E  
]F y' M  
让 Apache Httpd 可以实现 HTTP/2 协议 2)=whnFS  
  1. --enable-ssl
JqzoF}WH  
o[!'JUxZ  
开启 mocd_ssl 的支持 F1yn@a "=J  
  1. –with-nghttp2=/usr/local/nghttp2
Dd?G4xUG  
f+ r>ur}\)  
指定 nghttp2库 的位置,如果是利用系统以来的就不用这个  ew1L+  
  1. --with-ssl=/usr/local/openssl
.\XRkr'-  
>#G%2Vp  
指定 openssl 库 的位置,如果是利用系统以来的就不用这个 -N' (2'  
}WsPuo  
设置 HJl?@& l/  
E'WXi!>7p  
rp@:i _]  
在 httpd.conf 中,或者 /etc/enabled-sites/ 目录下添加或新建,具体文档自己参考。 qR@ES J_  
在相关虚拟主机的 443 端口中加入: M1Q&)am  
  1. ProtocolsHonorOrder On
  2. Protocols h2 h2c http/1.1
[piK"N  
a OmG,+o  
即可开启 HTTPS 和 h2 了,完整的参考可以这里: p cLKE ZK  
  1. <VirtualHost *:443>
  2.     ...
  3.     
  4.     SSLEngine on
  5.     SSLCertificateFile      /path/to/crt
  6.     SSLCertificateKeyFile   /path/to/key
  7.     SSLCACertificateFile    /path/to/ca_certs_for_client_authentication
  8.     ProtocolsHonorOrder On
  9.     Protocols h2 h2c http/1.1
  10.     
  11.     # HSTS
  12.     Header always set Strict-Transport-Security "max-age=15768000"
  13.     
  14.     # modern configuration, tweak to your needs
  15.       SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
  16.       SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-     SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-   AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-    RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
  17.       SSLHonorCipherOrder     on
  18.       SSLCompression          off
  19.       SSLSessionTickets       off
  20.       # OCSP Stapling, only in httpd 2.3.3 and later
  21.       SSLUseStapling          on
  22.       SSLStaplingResponderTimeout 5
  23.       SSLStaplingReturnResponderErrors off
  24.       SSLStaplingCache        shmcb:/var/run/ocsp(128000)
  25.     ...
  26.     
  27. </VirtualHost>
$wM..ee  
JO|j?%6YY  
本帖最近评分记录: 1 条评分 云币 +10
鬼才神兵 云币 +10 您的无私奉献精神值得我们学习!向您致敬! 2017-01-04
级别: 论坛版主
发帖
1784
云币
3327

只看该作者 沙发  发表于: 2017-01-04
您的无私奉献精神值得我们学习!向您致敬!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)