惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
博客园_首页
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
博客园 - 【当耐特】
月光博客
月光博客
C
Check Point Blog
T
The Blog of Author Tim Ferriss
罗磊的独立博客
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
美团技术团队
N
Netflix TechBlog - Medium
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
L
LangChain Blog
The Cloudflare Blog

秋水逸冰

丽萨主机:双ISP家宽住宅IP VPS/CN2 GIA精品网/G口大带宽 | 秋水逸冰 Linux Kernel 6.18.x 编译版 | 秋水逸冰 思考未来人与 AI 的关系 | 秋水逸冰 3X-UI 面板安装和使用教程 | 秋水逸冰 Xray-UI 面板安装和使用教程 | 秋水逸冰 WCMP (Windows + Caddy + MariaDB + PHP) Nginx for Windows | 秋水逸冰 Aria2 for Windows | 秋水逸冰 Curl for Windows | 秋水逸冰 Wget for Windows | 秋水逸冰 Windows 11 Enterprise LTSC DD 镜像 Windows Server 2025 Datacenter DD 镜像 重新编译 curl 以支持 HTTP3 | 秋水逸冰 tiny10 和 tiny11 23H2 的 Windows DD 镜像 从 Apache httpd 切换到 Caddy2 LCMP (Linux + Caddy + MariaDB + PHP) Windows 11 Pro for Workstations 22H2 DD 镜像 Shadowsocks 编译版 by Teddysun | 秋水逸冰 适用于 UEFI 启动的多个 Windows 系统 DD 镜像 Linux Kernel 5.15.x 编译版 | 秋水逸冰 制作适用于 WSL 的任意 Linux 镜像 Windows 11 Pro for Workstations 21H2 DD 镜像 Windows 10 Enterprise LTSC DD 镜像 Linux Kernel 5.14.x 编译版 | 秋水逸冰 Linux Kernel 5.13.x 编译版 | 秋水逸冰 Windows Server 2022 Datacenter DD 镜像 在 Windows 10 上安装 Rocky Linux 系统 Linux Kernel 5.12.x 编译版 | 秋水逸冰 Linux Kernel 5.11.x 编译版 | 秋水逸冰 在 Windows 10 上安装 CentOS 系统
LAMP下SSL设置教程 | 秋水逸冰
秋水逸冰 · 2016-06-26 · via 秋水逸冰

https(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 http 通道,简单讲是 http 的安全版。即 http 下加入 SSL 层,https 的安全基础是 SSL,因此加密的详细内容就需要 SSL。在各个 Linux 发行版中,实现 SSL 的一般则是 openssl 套件。
默认情况下,LAMP 是没有开启 SSL 的,需要手动配置。本篇教程主要是将手动配置的过程总结一下。
下面将从申请 CSR 开始,一步一步部署 SSL。

1、生成证书请求 CSR 文件

这里需要用到 openssl 命令,需要安装 openssl。
CentOS 下:

yum install -y openssl openssl-devel

Debian 或 Ubuntu 下:

apt-get install -y openssl

以 RSA 2048 私钥举例,命令如下:

openssl req -new -nodes -newkey rsa:2048 -sha256 -keyout server.pem -out server.csr

以 ECC 256 私钥举例,命令如下:

openssl ecparam -out server.pem -name prime256v1 -genkey
openssl req -new -key server.pem -out server.csr

以上命令,在生成 CSR 的时候会有个交互,如下:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN  // 国家代码
State or Province Name (full name) []:Shanghai  // 省
Locality Name (eg, city) [Default City]:Shanghai  // 市
Organization Name (eg, company) [Default Company Ltd]:Teddysun // 组织或公司名(随便填)
Organizational Unit Name (eg, section) []:  // 部门,可不填
Common Name (eg, your name or your server's hostname) []:teddysun.com // *则是通配符域名,一般证书发行会自带 www 子域名
Email Address []:[email protected]  // 邮箱地址(一定要有个域名邮箱,用以验证域名所有权)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:  // 不填
An optional company name []:  // 不填

注意:
这里的 server.pem 即为私钥,需要好好保存,最好你申请下来的证书在配置时,需要用到这个私钥,一旦私钥丢失,该证书就废了,只能重新申请。
一般情况下,申请 RSA 2048 的证书就足够了。

以上步骤全部做完,则会生成两个文件:
server.pem
server.csr

将其下载回本地,妥善保管。用任意文本编辑器打开 server.csr,用里面的内容去申请证书即可。

当然,最好是将这 2 个文件改名为你自己的域名,以方便辨识,比如:
teddysun_com.pem
teddysun_com.csr

2、申请证书

现在市面上应该已经存在 5 种免费 SSL(DV)的提供商了,分别是:
1)letsencrypt (https://github.com/certbot/certbot
2)startssl  (https://www.startssl.com/
3)wosign  (https://buy.wosign.com/free/
4)comodo
5)alphassl
前 3 种都比较容易申请,后 2 种则需要通过一些途径才能免费获取的到。

付费的则五花八门了,这里就不再赘述。

申请过程省略。

最后你会得到一个证书文件(一般后缀名为 crt)。
注意:
有的证书(比如 comodo 及 alphassl)还需要合并证书链,将你得到的证书以及根证书合并到同一个文件中才能使用。
每家的证书链都是不一样的,如果你是用 letsencrypt 申请的话,默认已经是有个完整证书链的证书了。
/etc/letsencrypt/live/<domain>/fullchain.pem

Tips:如何合并证书链?
用任意文本编辑器打开你的证书文件(比如名称为:teddysun_com.crt),在文本的最后面添加根证书(teddysun_com.ca-bundle)里的全部内容,保存。

3、部署证书

2017 年 11 月 4 日更新:
LAMP 新增对 Let’s Encrypt 的支持,自动签发免费的证书,并添加自动任务到 crond,定期运行自动更新证书。
LAMP 新增安装自定义证书,交互式搞定配置文件。
详情请浏览:https://lamp.sh/ssl.html

在安装完 LAMP 环境后,默认是没有加载 SSL 配置的。
1)这里需要修改一下配置文件
/usr/local/apache/conf/httpd.conf
找到下面的一行
#Include conf/extra/httpd-ssl.conf
将前面的 # 注释去掉,保存。

2)将合并后的证书,比如 teddysun_com.crt 和私钥 teddysun_com.pem 复制到路径 /usr/local/apache/conf/ 下。

3)修改配置文件 /usr/local/apache/conf/extra/httpd-ssl.conf ,内容如下:

Listen 443
SSLPassPhraseDialog  builtin
SSLSessionCache  "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost *:443>
    DocumentRoot /data/www/default/
    ServerName teddysun.com
    ServerAlias www.teddysun.com
    ErrorLog "/usr/local/apache/logs/teddysun_com_error_log"
    TransferLog "/usr/local/apache/logs/teddysun_com_access_log"

    SSLEngine on
    SSLProtocol All -SSLv2 -SSLv3
    SSLHonorCipherOrder on
    SSLCipherSuite ALL:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

    SSLCertificateFile /usr/local/apache/conf/teddysun_com.crt
    SSLCertificateKeyFile /usr/local/apache/conf/teddysun_com.pem

    CustomLog "/usr/local/apache/logs/teddysun_com_request_log" \
        "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b \"%{Referer}i\" \"%{User-Agent}i\""

    BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

    <Directory /data/www/default/>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

注意:
该配置文件是基于 Apache 2.4 而来。
VirtualHost 虚拟主机里的配置是可以更改的。
1)如果你想指定固定 IP 到该 VirtualHost,把 <VirtualHost *:443> 改为 <VirtualHost 12.34.56.78:443>,这里的 12.34.56.78 是举例 IP
2)DocumentRoot 是网站根目录,指定为你自己的目录
3)ServerName 是网站主域名,指定为你自己的
4)ServerAlias 是网站的其他域名,可定义多行,也可不定义。不定义的话,就删除该行
5)ErrorLog 是错误日志,指定具体路径
6)TransferLog 是访问日志,指定具体路径
7)SSLEngine 必须是 on
8)SSLProtocol 是指定 SSL 连接方式,不包含 SSLv2 和 SSLv3,这两种已不安全
9)SSLHonorCipherOrder 必须是 on
10)SSLCipherSuite 是加密套件,这里去除了一些不再安全的一些方式
11)SSLCertificateFile 是证书文件,指定具体路径
12)SSLCertificateKeyFile 是证书的私钥文件,指定具体路径
13)CustomLog 是自定义日志的格式
14)BrowserMatch 是浏览器匹配,这里主要是对微软 IE 旧版本 2-5 进行了定义
15)Directory 是和 DocumentRoot 一致的,是对文件夹一些属性的定义

参考链接:
https://httpd.apache.org/docs/current/mod/mod_ssl.html
https://httpd.apache.org/docs/current/mod/mod_setenvif.html
https://httpd.apache.org/docs/current/mod/core.html#directory

4、确认生效

在确认以上步骤全部完成,并且正确的情况下,重启 Apache 后即可生效。

/etc/init.d/httpd restart

查看 httpd 监听的端口,应该会有 443

netstat -anp | grep -v grep | grep httpd

域名解析好后,使用 Chrome 浏览器访问,你就会看到你的网址前有个可爱的小绿锁了。

5、测评

下面就可以来测评一下你的 SSL 部署的得分了。
访问以下网址:
https://www.ssllabs.com/ssltest/index.html

输入你的网站域名,跟上面配置里的 ServerName 的值一致。
稍等片刻,就会看到得分了。

按照以上配置,正常状态下,得分应该是 A

转载请注明:秋水逸冰 » LAMP下SSL设置教程