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

推荐订阅源

L
LangChain Blog
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
H
Hacker News: Front Page
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
N
Netflix TechBlog - Medium
U
Unit 42
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
Google Online Security Blog
Google Online Security Blog
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
L
LINUX DO - 热门话题
T
Tenable Blog
博客园 - 叶小钗
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
量子位
P
Proofpoint News Feed
H
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
宝玉的分享
宝玉的分享
Recorded Future
Recorded Future
The Register - Security
The Register - Security
F
Fortinet All Blogs
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Last Week in AI
Last Week in AI
S
Schneier on Security
V
Vulnerabilities – Threatpost
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
G
GRAHAM CLULEY
G
Google Developers Blog
月光博客
月光博客
V
V2EX
T
Troy Hunt's Blog
A
Arctic Wolf

秋水逸冰

丽萨主机:双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 系统 Linux Kernel 5.10.x 编译版 | 秋水逸冰 Caddy v1.0.5 编译版 | 秋水逸冰 在 Windows 系统里轻松创建自定义服务 | 秋水逸冰 如何在 CentOS 8 下安装 Docker Engine 在 CentOS 7 下构建 Android 编译环境 使用 Docker Buildx 构建多种系统架构镜像 | 秋水逸冰 使用 Docker 快速部署 Shadowsocks-libev + v2ray-plugin 如何使用 FirewallD 开启 IP 白名单 WireGuard 一键安装脚本 | 秋水逸冰 域名那些事儿5 | 秋水逸冰 告别 | 秋水逸冰 Windows Server 2019/2016/2012R2 Datacenter DD 镜像 如何制作 Windows Server 2019 的 DD 镜像 介绍几款 Docker 镜像 | 秋水逸冰 如何启用 Shadowsocks 的多端口 | 秋水逸冰 一键安装KMS服务脚本 | 秋水逸冰 关于免费SSL证书的那些事儿 | 秋水逸冰 使用定时任务cron监视Shadowsocks进程 | 秋水逸冰 LAMP新增Letsencrypt支持 | 秋水逸冰 从编译到二进制安装 | 秋水逸冰 PHP模块一览及简要说明 | 秋水逸冰 使用 GPG 加密 Github Commits 一键安装最新内核并开启 BBR 脚本 | 秋水逸冰 Shadowsocks 一键安装脚本(四合一) | 秋水逸冰 FTP 上传一键脚本ftp_upload.sh | 秋水逸冰 限制 IP 访问 WordPress 登录画面 CentOS 6.10安装Python2.7.18 | 秋水逸冰 一键备份脚本backup.sh | 秋水逸冰 域名那些事儿4 | 秋水逸冰 域名那些事儿3 | 秋水逸冰 LAMP下SSL设置教程 | 秋水逸冰 L2TP/IPSec一键安装脚本 | 秋水逸冰 域名那些事儿2 | 秋水逸冰 一键测试脚本bench.sh | 秋水逸冰 解决pip安装M2Crypto失败的问题 | 秋水逸冰 在CentOS下编译安装GCC | 秋水逸冰 域名那些事儿 | 秋水逸冰 MySQL性能优化的简单说明 | 秋水逸冰 Zend Guard Loader简介及下载链接一览 | 秋水逸冰 Windows和Linux下Whois命令的安装和使用 | 秋水逸冰 LAMP一键安装脚本使用说明 | 秋水逸冰 Windows系统下安装dig命令 | 秋水逸冰 如何在Debian下安装Webmin | 秋水逸冰 Shadowsocks-go一键安装脚本 | 秋水逸冰 少壮不努力,一生在内地 | 秋水逸冰 Google日语输入法离线安装包 | 秋水逸冰 PHP加速缓存Zend Opcache | 秋水逸冰 CentOS下安装aria2教程 | 秋水逸冰 Linux多线程下载工具Axel | 秋水逸冰 phpMyAdmin导入文件错误的解决办法 | 秋水逸冰 PHP编译安装常见错误总结 | 秋水逸冰 phpMyAdmin从4.1.x升级到4.2.x注意事项 | 秋水逸冰 Debian下shadowsocks-libev一键安装脚本 | 秋水逸冰 CentOS下shadowsocks-libev一键安装脚本 | 秋水逸冰 又一家VPS:Vultr.com | 秋水逸冰 Linux系统中常用操作命令 | 秋水逸冰 Eclipse下搭建Python开发环境 | 秋水逸冰 Shadowsocks Python版一键安装脚本 | 秋水逸冰 Git初学者:msysgit和tortoisegit | 秋水逸冰 CentOS 6下编译PHP出错 | 秋水逸冰 Apache如何开启Gzip压缩 | 秋水逸冰 Linux Shell逻辑运算符和表达式详解 | 秋水逸冰 吐槽腾讯:PC用户也是用户 | 秋水逸冰 Webmin:如何安装Perl模块DBI和DBD-MySQL | 秋水逸冰 CentOS下如何手动添加Swap | 秋水逸冰 安装PHP的PDO MySQL扩展 | 秋水逸冰 Javascript获取URL参数值 | 秋水逸冰 总结我所用过的VPS商家 | 秋水逸冰 Apache索引(目录浏览)的那些事儿 | 秋水逸冰 如何新建最低权限的SSH帐号 | 秋水逸冰
Apache下部署SSL教程 | 秋水逸冰
秋水逸冰 · 2015-01-23 · via 秋水逸冰

https(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 http 通道,简单讲是 http 的安全版。即 http 下加入 SSL 层,https 的安全基础是 SSL,因此加密的详细内容就需要 SSL。
个人网站用 SSL 证书,国外这几年开始比较流行起来,尤其是 Google 对使用了 SSL 证书的网站收录良好,越来越多的网站开始使用 https 访问了。但是国内的一众搜索引擎对 SSL 就不那么友好了,而且使用 SSL 后会拖慢网站浏览速度。
不管怎样,安全性越来越受到重视总归不是一件坏事。
那么在 Apache 里配置 SSL 是怎样的,我们一步一步来。

一、使用 OpenSSL 生成证书请求
生成 rsa 私钥(2048位)

openssl genrsa -out teddysun.pem 2048

Generating RSA private key, 2048 bit long modulus
.........................+++
................................................................+++
e is 65537 (0x10001)

生成 csr 证书请求

openssl req -new -sha256 -key teddysun.pem -out teddysun.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 []:  // 不填

查看生成完毕的文件

ll *.pem *.csr

-rw-r--r-- 1 root root 1058 Jan 22 14:30 teddysun.csr
-rw-r--r-- 1 root root 1675 Jan 22 14:25 teddysun.pem

将上述 2 个文件下载到本地,用记事本打开 teddysun.csr,里面的完整内容就是证书请求了。

二、签发证书

如果需要默认受信任的证书,则需要花钱购买了。比如 
https://www.namecheap.com/security/ssl-certificates/comodo/positivessl.aspx 
只需 9 美元/年。
利用第一步生成的 csr 文件,即可申请证书,过程略,网上有一堆图文教程。

另外,证书可以自签,但是使用的时候需要安装根证书,否则便不受信任。
下面说说自签名证书步骤

生成根证书 rsa 私钥(2048位)

openssl genrsa -out ca.pem 2048

Generating RSA private key, 2048 bit long modulus
...............................................+++
.........+++
e is 65537 (0x10001)

利用私钥创建根证书

openssl req -new -x509 -days 3650 -key ca.pem -out ca.crt

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 Root CA
Email Address []:[email protected]

至此,有效期为 3650 天的根证书 ca.crt 就创建完毕了。
查看生成完毕的文件

ll *.pem *.csr *.crt

-rw-r--r-- 1 root root 1411 Jan 22 15:14 ca.crt
-rw-r--r-- 1 root root 1679 Jan 22 14:48 ca.pem
-rw-r--r-- 1 root root 1041 Jan 22 14:40 teddysun.csr
-rw-r--r-- 1 root root 1675 Jan 22 14:25 teddysun.pem

利用根证书签发 ssl 证书

openssl ca -in teddysun.csr -out teddysun.crt -cert ca.crt -keyfile ca.pem

这一步出错了,错误信息如下

Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt'
140292081481544:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/index.txt','r')
140292081481544:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:

提示缺少文件,那我们就生成一个空文件

touch /etc/pki/CA/index.txt

继续执行

openssl ca -in teddysun.csr -out teddysun.crt -cert ca.crt -keyfile ca.pem

又出错了,错误信息如下

Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/serial: No such file or directory
error while loading serial number
140375536244552:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/serial','r')
140375536244552:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:

还是缺少文件,这里生成一个内容为 01 的文件

echo '01' > /etc/pki/CA/serial

再次执行

openssl ca -in teddysun.csr -out teddysun.crt -cert ca.crt -keyfile ca.pem

Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jan 22 07:35:14 2015 GMT
            Not After : Jan 22 07:35:14 2016 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Shanghai
            organizationName          = Teddysun
            commonName                = *.teddysun.com
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                E8:7F:9E:BE:12:25:22:48:A2:49:AE:D5:CB:A6:7B:24:EE:A6:E2:5B
            X509v3 Authority Key Identifier: 
                keyid:C7:0C:EF:F2:73:8C:CB:01:7A:8F:9C:30:A7:80:37:FA:E7:B6:88:02

Certificate is to be certified until Jan 22 07:35:14 2016 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

至此,就签发了一个默认有效期为 365 天的通配符域名 *.teddysun.com 的 ssl 证书了。
如果想签发更长有效期的证书,比如 730 天的,则命令如下:

openssl ca -in teddysun.csr -out teddysun2.crt -days 730 -cert ca.crt -keyfile ca.pem

最长不能超过根证书的有效期。

查看最终生成完毕的文件

ll *.pem *.csr *.crt

-rw-r--r-- 1 root root 1411 Jan 22 15:14 ca.crt
-rw-r--r-- 1 root root 1679 Jan 22 14:48 ca.pem
-rw-r--r-- 1 root root 4594 Jan 22 15:35 teddysun.crt
-rw-r--r-- 1 root root 1041 Jan 22 14:40 teddysun.csr
-rw-r--r-- 1 root root 1675 Jan 22 14:25 teddysun.pem

分别解释一下这 5 个文件。
ca.crt 是签发完成的根证书文件
ca.pem 是根证书的私钥文件
teddysun.crt 是签发完成的域名证书文件
teddysun.csr 是证书请求文件
teddysun.pem 是签发域名的私钥

如果要使用自签名的证书,需要在本机导入根证书,步骤如下:
点击“安装证书”,下一步,将所有的证书放入下列存储,浏览,选择“收信任的根证书颁发机构”,下一步,完成。

安装好根证书后,再打开后,就是这个样子的:

自签名证书则是这个样子的:

三、在 Apache 下部署 ssl 证书

首先需要合并一下证书文件,用记事本打开 ca.crt 文件,全选,复制,再用记事本打开 teddysun.crt ,在其内容的最后,回车,粘贴 ca.crt 的全部内容,保存。
当然,如果是在 namecheap 申请到的证书,发到你邮箱的时候都都打包好了,证书也合并好了,直接使用即可。

在安装完 LAMP 环境后,默认是没有加载 https 配置的,这里需要修改一下配置文件 /usr/local/apache/conf/httpd.conf ,找到下面的
#Include conf/extra/httpd-ssl.conf ,将前面的 # 去掉,保存。
将合并后的证书 teddysun.crt 和私钥 teddysun.pem 复制到 /usr/local/apache/conf/ 下。
再修改配置文件 /usr/local/apache/conf/extra/httpd-ssl.conf ,Sample 内容如下:

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/lamp_error_log"
	TransferLog "/usr/local/apache/logs/lamp_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.crt
	SSLCertificateKeyFile /usr/local/apache/conf/teddysun.pem

	CustomLog "/usr/local/apache/logs/lamp_ssl_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>

上述配置都修改完毕后,注意防火墙要放行 443 端口。查看防火墙状态:

/etc/init.d/iptables status

然后再重启 Apache ,命令:

/etc/init.d/httpd restart

好了,现在就可以愉快地用 https 访问网站了。

转载请注明:秋水逸冰 » Apache下部署SSL教程