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的域名)
  • email
  • 密码(可选,设置的话以后重启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配置全记录相关推荐

  1. manjaro i3安装配置全记录

    manjaro i3安装配置全记录 安装 准备 安装踩坑记录 硬盘 安装过程 系统配置 准备 设置中文系统 安装必要配置 美化桌面 常用软件推荐 安装研发环境(java方向手动安装) 安装 准备 ma ...

  2. 个人vscode插件配置全记录

    vscode是一款非常好的编辑器, 它的好很大一部分取决于丰富的插件库, 由于安装的插件比较多, 配置也比较多(个人喜欢瞎弄), 这里做一个插件和配置的备份, 纯粹个人配置, 做个参考 插件 Auto ...

  3. Jetson Nano配置踩坑全记录

    Jetson Nano配置踩坑全记录 Jetson Nano相关参数:JetPack 4.6,cuda 10.2, SD卡内存:512G 一.Jetson Nano系统镜像烧录 在Nvidia官网下载 ...

  4. 在CentOS7上安装配置Corosync高可用集群过程全记录

    在CentOS7上安装配置Corosync高可用集群过程全记录 一.环境.拓朴及其他准备工作: 1-1:准备网络YUM源环境: All Nodes OS CentOS 7.3 x86_64: # wg ...

  5. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程

    评论»   文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...

  6. FEDORA9安装后的配置lvlv全记录必看一览表 解决FC9安装后网络需激活

    FEDORA9安装后的配置lvlv全记录必看一览表 解决FC9安装后网络需激活 论坛相关精品信息: <script type="text/javascript">< ...

  7. OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录

    本文中,我们采访了PyImageSearch的忠实读者.OpenCV AI Kit (OAK)创始人--Brandon Gilles,他带来的OAK彻底颠覆了人们应用嵌入式计算机视觉和深度学习的方式. ...

  8. AIX 关键系统文件被清空问题定位过程全记录

    问题描述 某日接到客户反馈,某系统备机重启后 telnet 无法登录,提示信息如下: telnet (testlpar1)telnetd: /bin/login: Cannot run a file ...

  9. ubuntu20.04 开启休眠(hibernate)功能的成功解决以及各种尝试的过程全记录

    因为自己的电脑装的是win10 + ubuntu20.04的双系统,所以切换到另一个系统时,需要保存一下目前系统的RAM状态到硬盘上,然后再切换,这样再切换回来的话就能直接恢复之前的状态,比较方便. ...

最新文章

  1. 用db-RDA进行微生物环境因子分析-“ggvegan“介绍
  2. 用oracle用户登陆toad,配置Toad连接远程Oracle数据库
  3. 【生活智慧】005.信守诺言的约束
  4. pytorch:加载预训练模型(多卡加载单卡预训练模型,多GPU,单GPU)
  5. Stack Overflow: The Architecture - 2016 Edition(Translation)
  6. linux 中断分上下部分的原因
  7. 树状数组求逆序对_算法系列之-数组中的逆序对
  8. 【Python实例第33讲】单变量特征选择
  9. JSP项目引入Vue.js进行项目开发(工程搭建)
  10. 解决删除文件时出现“无法读取源文件或磁盘”的办法
  11. 班长团支书福音——爬虫+腾讯云短信平台实现自动提醒同学体温上报 【附源码】
  12. 批量修改联系人头像_视频号pr批量剪辑0基础实操课,pr批量处理伪原创一分钟一个视频【共2节】...
  13. 为什么程序员工资这么高?
  14. 计算机管理十大突出问题,TPM设备管理十大问题
  15. FPGA读取ADXL345
  16. Windows下缺少Android licenses的奇怪路径问题
  17. error C2679: binary ‘<<‘ : no operator defined which takes a right-hand operand of type ‘class s
  18. 各种抗锯齿效果的记录
  19. MY SQL 数据库库如何下载以及安装
  20. 如何理解空洞卷积(dilated convolution)

热门文章

  1. 钉钉api 获取 accesstoken_python3自定义告警信息发送至钉钉群
  2. 20220216-MISC-BUUCTF-另外一个世界-winhex,ASCII转换-FLAG- ZIP文件提取并修复-假如给我三天光明-ZIP改RAR,摩丝电码波形转换-神秘龙卷风brainfuck
  3. mysql在线复制_mysql如何在线修改主从复制选项
  4. mac 10.10 apache php,在Mac上10分钟搞定Apache服务器配置
  5. matlab 判断元素索引_matlab – 获取矩阵中n个最大元素的索引
  6. netty源码解解析(4.0)-2 Chanel的接口设计
  7. 使用ocr的自动备份还原ocr
  8. 第一冲刺阶段工作总结02
  9. 同事就是同事,职场没有兄弟姐妹
  10. C#中Bitmap类实现对图像操作的一些方法(转)