今天我们访问的所有网站几乎都是受HTTPS保护的。如果你的站点还没有,那你应该使用它。使用HTTPS保护服务器也意味着你不能从不是HTTPS服务器向此服务器发送请求。这给使用本地开发环境的开发人员带来了一个问题,因为它们都运行在开箱即用的http://localhost环境中。

在我参与的项目启动阶段,我们决定使用HTTPS来保护AWS弹性负载均衡入口,这是增强安全性的一部分。我遇到了这样的情况,本地开发环境对服务器的请求开始被拒绝。

在搜索谷歌之后,我发现了几篇类似这样的文章,其中详细说明了如何在localhost上实现HTTPS。即使在我虔诚地遵循这些指导之后,似乎没有一条是有效的。Chrome总是抛出一个NET::ERR_CERT_COMMON_NAME_INVALID错误给我。

问题

我所找到的所有详细说明在当时都是正确的。但现在不行了。

经过大量的谷歌搜索,我发现本地证书被拒绝的原因是Chrome不支持证书中的commonName匹配,实际上从2017年1月起就要求使用subjectAltName

解决方案

使用OpenSSL生成所有证书。

步骤1:根SSL证书

第一步是创建根安全套接字层(Secure Sockets Layer -SSL)证书。然后,可以使用此根证书对任意数量的独立域名的证书进行签名。如果您不熟悉SSL生态系统,DNSimple的这篇文章很好地介绍了根SSL证书。

生成一个RSA-2048密钥并将其保存到文件rootCA.key中。此文件将用作生成根SSL证书的密钥。每次使用此特定密钥生成证书时,都会提示您输入一个pass短语。

openssl genrsa -des3 -out rootCA.key 2048
复制代码

你可以使用生成的密钥创建新的根SSL证书。将它保存到一个名为rootCA.pem的文件中。本证书有效期为1024天。你可以随意把它改成你想要的天数。还会提示您输入其他可选信息。

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
复制代码

步骤2:信任根SSL证书

在使用新创建的根SSL证书开始颁发域证书之前,还有一个步骤。你需要告诉你的Mac要信任你的根证书,所以由它发出的所有证书也都是可信的。

打开Mac上的密钥链访问,进入系统密钥链中的证书类别。使用文件>导入项目导入rootCA.pem。双击导入的证书,并在“When using this certificate:”的选项下拉框中选择“始终信任”。

window系统通过window+r组合键调出运行运行工具后,输入certlm.msc,之后导入。

如果到目前为止正确地遵循了操作指引,那么你的证书在Keychain Access中应该是这样的。

步骤3:域SSL证书

现在可以使用根SSL证书专门为位于localhost的本地开发环境颁发证书。

创建一个新的OpenSSL配置文件server.csr.cnf,以便在创建证书时导入这些设置,而不是在命令行中输入它们。

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn [dn]
C=US
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=hello@example.com
CN = localhost
复制代码

创建一个v3.ext文件以创建一个X509 v3证书。注意这里是如何指定subjectAltName的。

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names [alt_names]
DNS.1 = localhost
复制代码

使用server.csr.cnf中存储的配置设置为本地主机创建证书密钥。此密钥存储在server.key中。

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )
复制代码

证书签名请求通过前面创建的根SSL证书发出,以便为localhost创建域证书。输出是一个名为server.crt的证书文件。

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
复制代码

使用新的SSL证书

现在可以使用HTTPS保护本地主机了。移动server.keyserver.crt文件到服务器上可访问的位置,并在启动服务器时包含它们。

在一个用Node.js编写的Express应用程序可以这样做。确保只在本地开发环境使用,不要在生产中使用这个。

var path = require('path')
var fs = require('fs')
var express = require('express')
var https = require('https') var certOptions = {
key: fs.readFileSync(path.resolve('build/cert/server.key')),
cert: fs.readFileSync(path.resolve('build/cert/server.crt'))
} var app = express() var server = https.createServer(certOptions, app).listen(443)
复制代码

希望本教程对你有用。如果你不习惯自己运行命令,我创建了一组方便的shell脚本,你可以快速运行这些脚本来生成证书。更多细节可以在GitHub repo上找到。

原文:How to get HTTPS working on your local development environment in 5 minutes

 

作者:Make_a_decision
链接:https://juejin.im/post/5cff091ee51d455cd73ba068
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

5分钟上手:本地开发环境启动HTTPS的更多相关文章

  1. 配置https and http2 local本地开发环境

    今天,几乎所有你访问的网站都是受HTTPS保护的.如果你还没有这样做,是时候这样做了.使用HTTPS保护您的服务器也就意味着您无法从非HTTPS的服务器发送请求到此服务器.这对使用本地开发环境的开发人 ...

  2. 手把手教你 Apache DolphinScheduler 本地开发环境搭建 | 中英文视频教程

    点击上方 蓝字关注我们 最近,一些小伙伴反馈对小海豚的本地开发环境搭建过程不太了解,这不就有活跃的贡献者送来新鲜的视频教程!在此感谢@Tianqi-Dotes 的细致讲解 贡献者还贴心地录制了中英文两 ...

  3. 【OpenStack】OpenStack系列1之OpenStack本地开发环境搭建&&向社区贡献代码

    加入OpenStack社区 https://launchpad.net/,注册用户(597092663@qq.com/Admin@123) 修改个人信息,配置SSH keys.OpenPGP keys ...

  4. 搭建BCE本地开发环境

    1. 在官网下载VirtualBox & 虚拟机 http://bce.baidu.com/doc/BAE/GUIGettingStarted.html#.E4.B8.8B.E8.BD.BD. ...

  5. 使用 Laragon 在 Windows 中快速搭建 Laravel 本地开发环境 (转)

    laravel学院 简介 对于那些使用 Windows 操作系统的同学来说,Homestead 和 LaraDock 虽说支持 Windows 系统,但是对初学者来说,安装配置起来还是有一定复杂度的, ...

  6. 基于 Laravel 开发博客应用系列 —— 设置 Windows 本地开发环境

    1.安装原生PHP 下载/解压 PHP 到 PHP 下载页下载最新版本的 PHP(如果使用 Laravel 5.1 的话需要 PHP 5.5.9+ 版本),解压下载的zip格式压缩文件到本地目录,比如 ...

  7. 在 Windows10 系统中安装 Homestead 本地开发环境

    在 windows10 系统中安装 homestead 本地开发环境 在 windows10 环境下安装 homestead 开发环境,网上有很多相关教程其中大多都是 mac 环境,很多大神都是用户的 ...

  8. 西秦的ACE-Python教程 一、Python本地开发环境部署

    西秦的ACE-Python教程 一.Python本地开发环境部署       西秦 级别: 论坛版主 发帖 1357 云币 2782 加关注 写私信   只看楼主 更多操作楼主  发表于: 10-10 ...

  9. spark-windows(含eclipse配置)下本地开发环境搭建

    spark-windows(含eclipse配置)下本地开发环境搭建   >>>>>>注意:这里忽略JDK的安装,JDK要求是1.8及以上版本,请通过 java  ...

随机推荐

  1. oracle 关联更新

    不多说了,我们来做实验吧. 创建如下表数据 select * from t1 ; select * from t2; 现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致. 方式1,u ...

  2. Java开发桌面程序学习(11)——javafx 鼠标点击,右击,双击

    javafx 鼠标事件 给某个控件设置鼠标点击监听器,三个条件分别判断为单击,右击还是双击 单击判断 event.getButton()==MouseButton.PRIMARY 右击判断 event ...

  3. Pi Network有梦想是好的,最新消息和下载注册流程。

    (注册流程最下面) ---------------------------------------------------------------------------------- 今日更新(10 ...

  4. Netty高性能组件——FastThreadLocal源码解析(细微处见真章)

    1. 前言 netty自行封装了FastThreadLocal以替换jdk提供的ThreadLocal,结合封装的FastThreadLocalThread,在多线程环境下的变量提高了ThreadLo ...

  5. [b0031] python 归纳 (十六)_线程同步_锁

    # -*- coding: utf-8 -*- """ 学习 多线程同步 使用锁 threading.Lock() 逻辑: 2 个线程,操作同一个整型变量,一个加法,另外 ...

  6. Fundebug录屏插件更新至0.6.0

    摘要: 录屏插件的性能进一步优化,传输的数据体积大幅度减少. 录屏功能介绍 Fundebug提供专业的异常监控服务,当线上应用出现 BUG 的时候,我们可以第一时间报警,帮助开发者及时发现 BUG,提 ...

  7. [20190909]完善vim的bccacl插件.txt

    [20190909]完善vim的bccacl插件.txt http://blog.itpub.net/267265/viewspace-2140886/http://blog.itpub.net/26 ...

  8. SQL Server 完整备份遇到的一个不常见的错误

    1. 错误详情 有一次在手动执行数据库完整备份时遇到如下错误: 执行多次都是这个错误信息. 提示无法生成检查点,原因可能是由于系统资源(如磁盘或内存空间)不足或者有时是由于数据库损坏而造成的. 我们检 ...

  9. 重温《NoSQL精粹》

    前言 在网上有关Redis相关文章满天飞的时候,它是什么,用于解决什么问题,有哪些相类似的技术,与传统的关系型数据库有哪些差别,什么时候使用?这个时候我决定重温一下<NoSQL精粹>. 也 ...

  10. day35作业

    1. 查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重) -- 2.查询每个老师教授的课程数量 和 老师信息 -- 3. 查询学生的信息以及学生所在的班级信息 -- 4.学生中男生的个 ...