今天我们访问的所有网站几乎都是受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. 3、Hibernate的多表关联

    一.数据库中的表关系: 一对一关系 一个人对应一张身份证,一张身份证对应一个人,一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里 ...

  2. hibernate关联关系(多对多)

    数据库的多对多数据库中不能直接映射多对多 处理:创建一个桥接表(中间表),将一个多对多关系转换成两个一对多 注:数据库多表联接查询 永远就是二个表的联接查询 注2:交叉连接 注3:外连接:left(左 ...

  3. curl_multi_*模拟多线程异步用法

    测试环境: PHP版本:php7.0.10 mysql版本:5.7.14 测试用例:循环插入两千行数据到数据库 public function test_syn($pc){ // $pc = trim ...

  4. DataGridView中实现点击单元格Cell动态添加自定义控件

    场景 鼠标点击DataGridView的某个单元格时,此单元格添加一个自定义的控件,这里以 添加下拉框为例 效果 注: 博客主页: https://blog.csdn.net/badao_liuman ...

  5. SpringMVC入门 -- 参数绑定

    一.REST与RESTful 1.简介 (1)REST(Representational State Transfer):表现层状态转移,一种软件架构风格,不是标准.REST描述的是在网络中clien ...

  6. 微软在Build 2019大会上发布Fluid Framework协作平台

    在今年年度开发者大会上,微软已经为开发人员宣布了一个新的Fluid Framework.该框架基本上是一个新的基于Web的平台,允许团队在自由流动的流程上工作.微软已经分享了一些新功能,可以帮助团队在 ...

  7. 9.python3实用编程技巧进阶(四)

    4.1.如何读写csv数据 爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup book ...

  8. tcp粘包、解决粘包问题

    目录 subproess模块 TCP粘包问题 粘包两种情况 解决粘包问题 struct模块的使用 使用struct模块解决粘包 优化解决粘包问题 上传大文件 服务端 客户端 UDP协议 upd套接字 ...

  9. HiGV ui代码流程

    在海思PDT_Init下有一个这样的函数HI_PDT_UI_Init(): 1. HI_PDT_UI_Init()函数: /*public, it should be called by main() ...

  10. win10python安装iis

    django部署iis https://www.cnblogs.com/guangang/articles/9268644.html python部署iis https://www.cnblogs.c ...