前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用openssl创建https证书

使用openssl创建https证书

作者头像
挥刀北上
修改2021-01-16 01:11:54
28.3K0
修改2021-01-16 01:11:54
举报
文章被收录于专栏:Node.js开发Node.js开发

从今天开始笔者打算和大家聊一聊http2这个协议,想要说清楚http2协议就必须亲手搭建一个http2的服务,并且对比http2和http1.1的特点,从而了解http2的一些新特性。

http2服务是建立在TSL/SSL基础之上的,类似于https,所以咱们先要搞清楚如何搭建一个https服务器,搭建https服务器的话就需要https证书,证书从哪里来呢?可以去阿里云买个域名,获得免费赠送的证书,也可以去https厂商那里申请收费证书,也可以用openssl这个工具自己生成证书。

写完上面这段感觉程序员好难,要搞懂一个东西通常要追根溯源,刨根问底,越刨坑越深,然后就掉坑里了,然后再自我救赎。

说了这么多,这里还有一个前置知识就是https的原理,如果你不是很清楚或者不明白,请查看这两篇文章白话https原理nginx如何配置https证书

如果你已经看了前面两篇文章,或者大致了解https,那么我们正式开始今天的主题,如何用openssl这个玩意生成证书呢?

先上一张图,这张图就是用openssl生成证书的整个流程了,如何看这个图呢?

这个图有A、B、C三个部分,分别用三种颜色框选了一下(给小编加鸡腿?),A部分是CA机构根证书的生成过程,这个过程需要先生成CA机构的私钥,再由CA机构的私钥生成CA机构证书申请文件,然后再由这两个文件生成根证书。

B部分是生成服务器私钥,然后由服务器私钥生成服务器证书申请文件。

C部分是最后一部分,也就是生成服务器的公钥证书,服务器的公钥证书需要三部分一起来生成,A部分的CA机构的私钥,CA机构的申请证书文件,B部分的服务器证书申请文件,这三部分一起来生成服务器的公钥证书。

根据图示,分为如下几个步骤:

1、生成服务器私钥。

代码语言:javascript
复制
openssl genrsa -out server.key 1024

2、根据服务器私钥文件生成证书请求文件,这个文件中会包含申请人的一些信息,所以执行下面这行命令过程中需要用户在命令行输入一些用户信息,随便填写,一路回车即可。

代码语言:javascript
复制
openssl req -new -key server.key -out server.csr

3、生成CA机构的私钥,命令和生成服务器私钥一样,只不过这是CA的私钥

代码语言:javascript
复制
openssl genrsa -out ca.key 1024

4、生成CA机构自己的证书申请文件

代码语言:javascript
复制
openssl req -new -key ca.key -out ca.csr

5、生成自签名证书,CA机构用自己的私钥和证书申请文件生成自己签名的证书,俗称自签名证书,这里可以理解为根证书。

代码语言:javascript
复制
openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

6、根据CA机构的自签名证书ca.crt或者叫根证书生CA机构的私钥ca.key服务器的证书申请文件server.csr生成服务端证书。

代码语言:javascript
复制
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

上面的过程其实是模拟了各大https证书厂商生成https证书的过程,其中涉及到了根证书等等一些概念,如果你不是太明白也没有关系,我们还有B方案,我只想要证书,不想搞得太深,那么请使用如下方法,简便快捷。

只需要三步:

第一步,生成服务器私钥:

代码语言:javascript
复制
openssl genrsa -out server.key 1024

第二步,根据私钥和输入的信息生成证书请求文件:

代码语言:javascript
复制
openssl req -new -key server.key -out server.csr

第三步:用第一步的私钥和第二步的请求文件生成证书:

代码语言:javascript
复制
openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650

这样我们就拿到了私钥server.key和证书server.crt。

为什么第二种方式比第一种简单并且步骤还少呢?这里简单介绍一下,第一种方式是模拟https厂商生成https证书的简易过程,https证书厂商一般都会有一个根证书,这里我们模拟生成了https厂商根证书,也就是第一种方法的3、4、5步骤。

在实际应用中,这些步骤对用户来说是不可见的,这里只是简单模拟,通常证书申请用户只需要将服务器的公钥(注意不是私钥)和服务器证书申请文件交给https证书厂商即可,之后https厂商会通过邮件回复一个服务器公钥证书,拿到这个证书和自己生成的服务器私钥就可以搭建https应用了。

第二种方法比较简单,是因为我们自己生成证书在本地测试,我们既是https厂商的角色也是用户角色,我们直接用自签名证书当做服务器证书就可以了,简单快捷,不过这里只适用于测试。

总结一下:

1、本篇文章简单将http2的知识路径图梳理一下,要了解http2,就要搭建http2服务,搭建http2服务,就要了解如何搭建https服务,要了解https服务如何搭建,就要了解https的原理和如何获取证书,今天讲的就是如何获取证书。

2、今天的主要知识点是如何用openssl生成https证书的两种方法,第一种方法是模拟https厂商的生成https证书的一个简单流程,第二种方法是简化版,适合做本地测试。

下期我们用这次生成的http送证书搭建一个https服务。

node.js express 启用 https https://www.cnblogs.com/whm-blog/p/9413958.html

基于 OpenSSL 生成自签名证书 https://qhh.me/2019/05/18/%E5%9F%BA%E4%BA%8E-OpenSSL-%E7%94%9F%E6%88%90%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6/

Openssl生成自签名证书,简单步骤 https://ningyu1.github.io/site/post/51-ssl-cert/

如果大家有什么意见或者建议欢迎留言

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nodejs全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档