HTTPS配置全记录
HTTPS配置全记录
环境
常见的部署环境和条件有以下几种情况组合:
- Apache+自签名证书
- Apache+免费或商业证书
- Nginx+自签名证书
- Nginx+免费或商业证书
免费证书和商业证书本质上是一样的,都是可以被系统承认的证书,只是申请方式不同而已。
证书
证书结构
配置一个HTTPS服务所需要的证书包括几个部分:
- Server Key(服务器私钥)
- CSR(Certificate Signing Request)
- CRT(X509 Certificate)
创建证书的基本流程是这样:
- 生成自己的服务端私钥
- 输入基本信息并用私钥签名生成CSR
- 提交CSR给证书机构CA(免费或商业证书)签名生成CRT,或自己做CA签名生成CRT(自签名证书)
其中前两个步骤都是一样的,在这里统一说明一下。
生成服务器私钥:
openssl genrsa -out server.key 4096
输出的server.key文件就是服务器私钥,4096是密钥长度,要求不高的话用2048也可。
生成CSR:
openssl req -new -sha256 -key server.key -out yoursite.csr
因为sha1已经不安全,所以这里用了sha256,可能太旧的客户端(比如win98?)会不支持。
yoursite.csr就是生成的CSR,yoursite建议用你的网站名标识会比较方便识别。
然后按提示输入:
- 国家
- 省
- 市
- 公司
- 部门
- 通用名(即网站域名,这个必须准确,有些商业证书支持在这里用带www的域名后签发出同时支持不带www的域名)
- 密码(可选,设置的话以后重启webserver都需要输入密码)
自签名证书做法
生成CRT:
openssl x509 -req -days 3650 -in yoursite.csr -signkey server.key -out yoursite.crt
其中签名用的KEY就是自己的服务端私钥,所以这是一个自签名证书。
有效期为3650天(即十年)。
免费证书生成
参见旧文《Let’s HTTPS》。
商业证书生成
首先找一个商业证书机构(CA)或其代理商下一个证书订单。
其次是选择证书类型。
证书类型
商业证书有很多类型,也有很多的CA可以选择,不同的CA,不同的类型价格也不一样。
常见的CA有:
- VeriSign(Symantec)
- GeoTrust(RapidSSL)
- Comodo
- ……
以上以价格从高到低排序。除此之外当然还有很多,具体可以打开你的系统证书列表看看。
需要特别说一句的就是:臭名昭著的CNNIC和沃通(WoSign,包括免费的StartSSL),已经被证明不安全,建议将它们从系统中删除,并且不要去申请使用它们的证书。
常见的证书类型有三种:
- DV(域名验证)
- OV(组织验证)
- EV(扩展验证)
验证级别从低到高排序,价格也是如此。
DV证书只验证域名,在最终访问者那边查看证书时将不会包含CSR中的组织信息,只有域名信息,也就是说你就算是在CSR里输入你是GOOGLE,到了客户端那里也是看不到的。
OV证书除了验证域名还需要验证组织,即你需要提供证据证明你在CSR里输入的公司或组织的确是你, 这样才能在客户端证书里查看到你的组织信息。
EV证书就要求更高了,通常是金融机构之类的用。
除此之外,证书还有一种区别:
- 单域名证书
- 多域名证书
- 泛域名证书
一样是价格从高到低排序。
单域名证书就是只能用于一个域名的证书,某些商业证书可以提供两个域名:带WWW的和不带WWW的。
多域名证书就是一个证书可以用于多个域名,默认支持三个域名,当然增加域名需要加钱,但比单独买单域名证书要便宜。适用于一个公司有多个域名,而且多个域名部署在一个服务器上,使用一个证书会比较省事,也比较便宜。
泛域名证书就是一个证书可以用于一个域名下的任意多个子域名。
申请流程
一般申请流程(仅指DV类型)如下:
- 选择CA或代理商
- 选择证书类型
- 选择有效期(以年为单位,一般时间越长单价越便宜)
- 下单付款
- 成交后按服务商的邮件或文档开始验证域名(以下为一种流程,不同服务商可能不太一样)
- 上传CSR(或用服务商提供的工具生成,但不推荐)
- 选择验证方式(EMAIL,文件,DNS等)
- 按相应方式操作
- 等待验证
- 取得证书(邮件或从服务商处自行下载)
其中各验证方式大致如下:
- Email:证书机构向域名注册邮箱或域名的webmaster等邮箱(可选)发送验证邮件
- 文件:在域名的指定路径下放验证文件供证书机构访问
- DNS:创建指定的DNS TXT记录供证书机构验证
通过验证后即可获得证书。
证书内容一般包括:域名的CRT,证书机构的CRT链(可能有多个),根证书CRT(CA的证书),如果用服务商的工具生成CSR,还应该会有CSR和KEY。
部署
分别以最常用的Apache和Nginx为例,其它WebServer请参考相关文档。
Apache
这里只介绍Apache2(以2.4为例)。
HTTPS的基本配置可以直接套用默认配置,只是要改一下证书文件的部分:
SSLEngine on
SSLCertificateFile /path_to_ssl/yoursite.crt
SSLCertificateKeyFile /path_to_ssl/yoursite.key
SSLCertificateChainFile /path_to_ssl/server-ca.crt
其中yoursite.crt和yoursite.key就是前面说过的私钥和域名证书。
重点说一下server-ca.crt,这个就是前面谈到商业证书时提到的中间证书链(包括CA根证书)。对于Let’s Encrypt这样的免费证书,这个就是Let’s Encrypt的证书(见旧文),对于自签名证书,这一项可以去掉。
中间证书链的生成方法如下:
cat provider.crt provider-parent.crt root.crt > server-ca.crt
很简单,就是把那一堆证书串起来生成一个证书文件即可,不过需要注意顺序,从最低级的证书(你的域名证书的上一级)开始到最高级的CA根证书。
Apache从2.2.12开始支持SNI,可以为多个域名的虚拟主机使用各自独立的证书,用法与HTTP虚拟主机类似,只需要在每个虚拟主机配置里加上相应的证书配置即可。
需要注意的是:WinXP,JAVA6,Android 2.3等不支持SNI。
最后,如我在去年的旧文里所说,SSLv2/v3之类的协议和某些SSL加密算法已经不再安全,所以在没有特定的兼容性需要的情况下,需要配置禁用这些不安全的选项。
在全局配置(注意,不是单个虚拟主机配置里)里加上:
SSLProtocol TLSv1 +TLSv1.1 +TLSv1.2
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES128-SHA:!DHE-DSS-AES128-SHA256:!DHE-RSA-AES256-SHA256:!DHE-DSS-AES256-SHA:!DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
以上协议和加密算法都是目前还安全的,并且提供了最大可能的兼容性。未来如果出现新的安全问题,请自行调整。
Nginx
基本上在旧文里都说过了,这里再总结一下。
相比Apache的配置,Nginx没有单独的中间证书链项目,所以是把中间证书链和域名证书串在一起作为完整的域名证书来用:
cat yoursite.crt server-ca.crt > new_yoursite.crt
配置HTTPS:
ssl on;
ssl_certificate "/path_to_ssl/new_yoursite.crt";
ssl_certificate_key "/path_to_ssl/yoursite.key";
SNI配置见旧文,从略。
全局安全配置:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
配置完成后重启服务即可生效。
不论是用Apache还是Nginx,都建议配置完HTTPS以后到SSL Labs验证一下安全性。
HTTPS配置全记录相关推荐
- manjaro i3安装配置全记录
manjaro i3安装配置全记录 安装 准备 安装踩坑记录 硬盘 安装过程 系统配置 准备 设置中文系统 安装必要配置 美化桌面 常用软件推荐 安装研发环境(java方向手动安装) 安装 准备 ma ...
- 个人vscode插件配置全记录
vscode是一款非常好的编辑器, 它的好很大一部分取决于丰富的插件库, 由于安装的插件比较多, 配置也比较多(个人喜欢瞎弄), 这里做一个插件和配置的备份, 纯粹个人配置, 做个参考 插件 Auto ...
- Jetson Nano配置踩坑全记录
Jetson Nano配置踩坑全记录 Jetson Nano相关参数:JetPack 4.6,cuda 10.2, SD卡内存:512G 一.Jetson Nano系统镜像烧录 在Nvidia官网下载 ...
- 在CentOS7上安装配置Corosync高可用集群过程全记录
在CentOS7上安装配置Corosync高可用集群过程全记录 一.环境.拓朴及其他准备工作: 1-1:准备网络YUM源环境: All Nodes OS CentOS 7.3 x86_64: # wg ...
- 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程
评论» 文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...
- FEDORA9安装后的配置lvlv全记录必看一览表 解决FC9安装后网络需激活
FEDORA9安装后的配置lvlv全记录必看一览表 解决FC9安装后网络需激活 论坛相关精品信息: <script type="text/javascript">< ...
- OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录
本文中,我们采访了PyImageSearch的忠实读者.OpenCV AI Kit (OAK)创始人--Brandon Gilles,他带来的OAK彻底颠覆了人们应用嵌入式计算机视觉和深度学习的方式. ...
- AIX 关键系统文件被清空问题定位过程全记录
问题描述 某日接到客户反馈,某系统备机重启后 telnet 无法登录,提示信息如下: telnet (testlpar1)telnetd: /bin/login: Cannot run a file ...
- ubuntu20.04 开启休眠(hibernate)功能的成功解决以及各种尝试的过程全记录
因为自己的电脑装的是win10 + ubuntu20.04的双系统,所以切换到另一个系统时,需要保存一下目前系统的RAM状态到硬盘上,然后再切换,这样再切换回来的话就能直接恢复之前的状态,比较方便. ...
最新文章
- 用db-RDA进行微生物环境因子分析-“ggvegan“介绍
- 用oracle用户登陆toad,配置Toad连接远程Oracle数据库
- 【生活智慧】005.信守诺言的约束
- pytorch:加载预训练模型(多卡加载单卡预训练模型,多GPU,单GPU)
- Stack Overflow: The Architecture - 2016 Edition(Translation)
- linux 中断分上下部分的原因
- 树状数组求逆序对_算法系列之-数组中的逆序对
- 【Python实例第33讲】单变量特征选择
- JSP项目引入Vue.js进行项目开发(工程搭建)
- 解决删除文件时出现“无法读取源文件或磁盘”的办法
- 班长团支书福音——爬虫+腾讯云短信平台实现自动提醒同学体温上报 【附源码】
- 批量修改联系人头像_视频号pr批量剪辑0基础实操课,pr批量处理伪原创一分钟一个视频【共2节】...
- 为什么程序员工资这么高?
- 计算机管理十大突出问题,TPM设备管理十大问题
- FPGA读取ADXL345
- Windows下缺少Android licenses的奇怪路径问题
- error C2679: binary ‘<<‘ : no operator defined which takes a right-hand operand of type ‘class s
- 各种抗锯齿效果的记录
- MY SQL 数据库库如何下载以及安装
- 如何理解空洞卷积(dilated convolution)
热门文章
- 钉钉api 获取 accesstoken_python3自定义告警信息发送至钉钉群
- 20220216-MISC-BUUCTF-另外一个世界-winhex,ASCII转换-FLAG- ZIP文件提取并修复-假如给我三天光明-ZIP改RAR,摩丝电码波形转换-神秘龙卷风brainfuck
- mysql在线复制_mysql如何在线修改主从复制选项
- mac 10.10 apache php,在Mac上10分钟搞定Apache服务器配置
- matlab 判断元素索引_matlab – 获取矩阵中n个最大元素的索引
- netty源码解解析(4.0)-2 Chanel的接口设计
- 使用ocr的自动备份还原ocr
- 第一冲刺阶段工作总结02
- 同事就是同事,职场没有兄弟姐妹
- C#中Bitmap类实现对图像操作的一些方法(转)