apache证书不受信任_Apache开启HTTPS支持并绑定(泛域名)CA证书

HTTPS 在传输时的安全性比 HTTP 安全得多,博主打算对某些二级域名使用 HTTPS 来保证安全性。

c94df443687cfadef25d002ec6761b9d.pngHTTPS

接下来博主介绍如何在编译安装的 Apache 上开启 HTTPS 支持并绑定 CA 证书

STEP 1

购买一张自己域名的 CA 证书

可以购买一张自己域名的泛域名 CA 证书,这样一个证书域名下的二级域名可以通用。

购买后你会从购买商那里获得 1 – 2 段公钥,加上自己保存的 1 段私钥,通过修改文件扩展名的方法保存为这样的 2 – 3 个文件:

一个是私钥文件,格式为 *.key 或 *.pem,一般为 *.key。本文为 server.key

一个是证书文件,格式为 *.crt。本文为 cert.crt

一个是链证书文件,格式为 *.crt(如果你的证书是由根证书直接颁发的,就没有这段公钥,反之就有)。本文为 chaincer.crt

本文不涉及 CA 证书的购买方法。当然对于一些只有自己访问的网站,可以使用自签发的证书,只不过在用浏览器访问时会出现证书不受信任的警告,当然本文也不涉及生成一张自签名证书的方法。

STEP 2

把私钥及证书文件上传至安全的服务器

私钥只允许你自己拥有,请确保服务器的安全,不然私钥被盗就呵呵了Σ(゚д゚;)

使用各种方法上传这些文件,FTP 也好,直接 VIM 编辑也好,这里提供直接 vim 保存的方法:

mkdir /usr/local/apache/conf/cert

#在一个安全的地方创建一个存放证书的文件夹

cd /usr/local/apache/conf/cert

#进入存放证书的文件夹

vim server.key

#创建私钥文件

#请把私钥黏贴到文件中,之后按Esc键并输入":wq"(不包含引号)保存

vim cert.crt

#创建证书文件

#请把证书公钥黏贴到文件中,之后按Esc键并输入":wq"(不包含引号)保存

#如果有链证书公钥的话

vim chaincer.crt

#创建链证书文件

#请把链证书公钥黏贴到文件中,之后按Esc键并输入":wq"(不包含引号)保存

STEP 3

修改 Apache 的 httpd-ssl.conf 文件和 httpd.conf 文件,已更新 HTTP/2 相关配置。

先绑定证书,之后再启用 Apache 的 SSL 支持。说白了就相当于修改 httpd-vhost.conf 中的内容,格式都是一样的。

注:这里文件的默认路径就采用博主之前的博文《编译安装LAMP:Apache篇》中使用的路径,请执行以下 shell 前先修改相应内容。

sed -i 's@^@@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i '/^Listen 443/a\

Protocols h2 http/1.1' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@^DocumentRoot "/usr/local/apache/htdocs"@DocumentRoot "/data/www/default"@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@^ServerName www.example.com:443@ServerName blog.ttionya.com:443@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's#^ServerAdmin you@example.com#ServerAdmin administrator@ttionya.com#' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@^ErrorLog\(.*\)@#ErrorLog\1@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@^TransferLog\(.*\)@#TransferLog\1@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@^CustomLog\(.*\)@CustomLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log_ssl_%Y%m%d.log 86400" combined@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@\(.*\)"%t %h %{SSL_PROTOCOL}x\(.*\)@#\1"%t %h %{SSL_PROTOCOL}x\2@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@^SSLCertificateKeyFile.*@SSLCertificateKeyFile "/usr/local/apache/conf/cert/server.key"@' /usr/local/apache/conf/extra/httpd-ssl.conf

#这里绑定私钥文件

sed -i 's@^SSLCertificateFile.*@SSLCertificateFile "/usr/local/apache/conf/cert/cert.crt"@' /usr/local/apache/conf/extra/httpd-ssl.conf

#这里绑定证书文件

sed -i 's@^#SSLCertificateChainFile.*@SSLCertificateChainFile "/usr/local/apache/conf/cert/chaincer.crt"@' /usr/local/apache/conf/extra/httpd-ssl.conf

#这里绑定链证书文件(如果有)

httpd-ssl.conf 文件可以简化为以下内容:

Listen 443

Protocols h2 http/1.1

SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4

SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4

SSLHonorCipherOrder on

SSLProtocol all -SSLv3

SSLProxyProtocol all -SSLv3

SSLPassPhraseDialog  builtin

SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"

SSLSessionCacheTimeout 300

DocumentRoot "/data/www/default"

ServerName blog.ttionya.com:443

ServerAdmin administrator@ttionya.com

SSLEngine on

SSLCertificateFile "/usr/local/apache/conf/cert/cert.crt"

SSLCertificateKeyFile "/usr/local/apache/conf/cert/server.key"

SSLCertificateChainFile "/usr/local/apache/conf/cert/chaincer.crt"

SSLOptions +StdEnvVars

SSLOptions +StdEnvVars

BrowserMatch "MSIE [2-5]" \

nokeepalive ssl-unclean-shutdown \

downgrade-1.0 force-response-1.0

CustomLog "| /usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log_ssl_%Y%m%d.log 86400" combined

之后再修改 httpd.conf 文件使之加载 httpd-ssl.conf 文件,可以直接执行以下 shell。

sed -i 's@^#LoadModule\(.*\)mod_socache_shmcb.so@LoadModule\1mod_socache_shmcb.so@' /usr/local/apache/conf/httpd.conf

sed -i 's@^#LoadModule\(.*\)mod_http2.so@LoadModule\1mod_http2.so@' /usr/local/apache/conf/httpd.conf

sed -i 's@^#Include conf/extra/httpd-ssl.conf@Include conf/extra/httpd-ssl.conf@' /usr/local/apache/conf/httpd.conf

如果有许多域名要用到 HTTPS 的话,只要把 及里面的内容复制一份并适当修改就能正常使用了。

STEP 4

SSL 的安全性设置

2014 年,SSL 曝出了好几个漏洞,例如 “Heartbleed(心脏流血)” 和 “POODLE(贵宾犬)”。这里要把不安全因素处理掉,关于 mod_ssl 的官方文档。

1、修复“Heartbleed(心脏流血)”漏洞(重要)

只需要更新系统的 openssl 就能修复该漏洞:

Debian/Ubuntu:

sudo apt-get update

sudo apt-get upgrade openssl

CentOS/Redhat/Fedora:

yum update openssl

手动编译:

重新编译一遍新版本

检测漏洞是否被修复:

openssl version -b

#执行以上命令,若openssl版本为1.0.1并且编译时间晚于2014年4月7日则漏洞已被修复

2、修复“POODLE(贵宾犬)”漏洞(建议)

只有使用 SSLv3 时才产生该漏洞,而且该漏洞无法修复,只能禁用 SSLv3 的支持。

现在 Apache 已经默认禁用了 SSLv3,故无需重复添加。

sed -i '/^Listen 443/a\

SSLProtocol all -SSLv3' /usr/local/apache/conf/extra/httpd-ssl.conf

3、禁用RC4加密方式(建议)

RC4 的加密方式比较脆弱,建议禁用。

新版 Apache 已经默认采用禁用了 RC4 加密方式的配置,故无需再次添加。

sed -i 's@^SSLCipherSuite.*@SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4@' /usr/local/apache/conf/extra/httpd-ssl.conf

sed -i 's@^SSLProxyCipherSuite.*@SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4@' /usr/local/apache/conf/extra/httpd-ssl.conf

STEP 5

若想在打开 HTTP 时自动跳转为 HTTPS,可以在 httpd-vhost.conf 中设置以下内容:

#在中加上以下内容

RewriteEngine on

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [L,R]

STEP 6

重新启动 Apache 服务

/etc/init.d/httpd restart

重启完成后,HTTPS 就能正常使用了。

PS:

下面提供一些检测 HTTPS 安全性的网站:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值