使用openssl 生成免费证书的方法步骤

一:什么是openssl? 它的作用是?应用场景是什么?

即百度百科说:openssl是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,它可以避免信息被窃听到。

SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape(网景)公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。

因为在网络传输的过程中,网络的数据肯定要经过wifi路由器对吧,那么我们通过路由器做些手脚我们就可以拿到数据,因此openssl的作用就是避免信息被窃听到。

那么openssl是如何保证信息不被窃听到呢?因此我们需要了解 非对称加密、数字签名、数字证书等一些基本概念的。

1.1 什么是非对称加密?

非对称加密是用密钥对数据进行加密,然后我们可以使用另一个不同的密钥对数据进行解密。这两个密钥就是公钥和私钥。

我们根据私钥可以计算出公钥,但是我们根据公钥计算不出来私钥的。私钥一般是有服务器掌握的,公钥则是在客户端使用的。

注意:非对称加密的具体算法我们这边不做研究。

1.2 什么是数字签名?

根据百度百科说:数字签名(又可以叫公钥数字签名)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,它是用于鉴别数字信息的方法。数字签名有两种互补的运算,一个是用于签名,另一个是用于验证。

作用是:它会将报文使用一定的HASH算法算出一个固定位数的摘要信息,然后使用私钥将摘要加密,然后会将刚才的报文一起发送给接收者,接收者会通过公钥将摘要解出来。也通过hash算法算出报文摘要,如果两个摘要一致,说明数据未被篡改,说明数据是完整的。

1.3 什么是数字证书?

根据百度百科说:数字证书是互联网通讯中标志通讯各方身份信息一串数字。提供了一种在Internet上验证通信实体身份的方式。
它是由CA颁发给网站的一种身份的方式。它里面包含了该网站的公钥、有效时间、网站的地址、及 CA的数字签名等。

作用是:它是使用CA的私钥将网站的公钥等信息进行了签名,当客户端请求服务器端的时候,网站会把证书发给客户端,客户端先通过CA的数字签名校验CA的身份,来证明证书的真实完整性。

了解到上面的非对称加密、数字签名、数字证书的概念之后,我们来看看它是如何来保证数据没有被伪造的:

SSL 实现认证用户和服务器

现在我们来想一个问题,如果我们现在访问我们的博客园网站,我们怎么知道访问的是真博客园还是假博客园呢?为了确定我们的博客园网站的服务器有没有被伪造,在SSL中有这么一个规则:假如我们向服务器发出请求后,服务器必须返回它的数字证书给接收者,当我们拿到数字证书之后,我们可以根据里面的ca数字签名,来检验数字证书的合法性。假如我们现在能够证明数字证书是博客园的,但是不代表发送给我们证书的服务器就是博客园的呢?为了解决这个问题,其实在我们拿到的证书里面会带有博客园的公钥,在之后的通信中,客户端会使用该公钥加密数据给博客园服务器,博客园服务器必须使用私钥才能够解出里面的数据。只要他能够解出数据出来,说明他是合法的,否则的话,是伪造的。如果是伪造的,那么就不能通讯。因此SSL就解决了服务器认证的问题了。

加密数据在通讯过程中如何防止数据不被窃取呢?

客户端第一次给服务器发送请求的时候(拿到证书之前的那个请求),会在请求里面放一个随机数(比如叫A),服务器的返回证书的响应里也会带一个随机数(比如叫B), 客户端拿到证书后,会使用公钥加密一个随机数(比如叫C)发送给服务器,因此客户端,服务器就有三个随机数:A、B、C。双方使用这些随机数和一个相同的算法会生成一个密钥,以后所有的通信都使用这个对称密钥来进行的。

一般情况下,这三个密钥不可能同时被泄露的,因为它是由三个随机数随机生成的。并且其中一个随机数使用了公钥加密的。因此是通过这种方式来保证数据不被窃取的。

上面都是在网上看到的一些概念性问题,简单的理解下就好了,知道是这么个概念就行了,而我们的openssl是SSL的实现版。因此openssl的作用避免信息被窃取到,它是通过上面的知识点来做到的。

openssl的应用场景:

在使用http网站中,我们经常看到网站会有一些广告什么的,这些广告其实不是网站自己放上去的,而是中间的运营商在中间篡改了内容导致的。现在我们可以使用https技术(基于openssl)来对数据进行加密的。它能保证数据不被篡改。

二:使用openssl生成免费证书

1 使用openssl工具生成一个RSA私钥

使用命令:

openssl genrsa -des3 -out server.key 2048

如上:des3 是算法,2048位强度(为了保密性)。 server.key 是密钥文件名 -out的含义是:指生成文件的路径和名称。

如下所示:

我们查看刚刚生成的私钥。使用命令如下:

openssl rsa -text -in server.key

如下图所示:

继续查看 server.key 使用命令:cat server.key, 如下图所示:

2. 创建证书签名请求CSR文件

使用命令如下:

openssl req -new -key server.key -out server.csr

-key的含义是:指定ca私钥
-out的含义是: server.csr 生成证书文件

如下所示:

运行如上命令后,生成CSR时会要求填入以下信息:

Country Name (2 letter code) []:CN            // 输入国家代码,中国填写 CN
State or Province Name (full name) []:HangZhou      // 输入省份,这里填写 HangZhou
Locality Name (eg, city) []:HangZhou           // 输入城市,我们这里也填写 HangZhou
Organization Name (eg, company) []:tbj          // 输入组织机构(或公司名,我这里随便写个tbj)
Organizational Unit Name (eg, section) []:tbj       // 输入机构部门
Common Name (eg, fully qualified host name) []:*.abc.com // 输入域名,我这边是 (*.abc.com)
Email Address []:tugenhua0707@qq.com           // 你的邮箱地址

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456              // 你的证书密码,如果不想设置密码,可以直接回车

如上操作后,会在当前目录下生成以下两个文件:

server.key server.csr

如下图所示:

查看csr文件如下命令:

openssl req -text -in server.csr -noout

如下图所示:

3. 生成CA证书

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

x509的含义: 指定格式
-in的含义: 指定请求文件
-signkey的含义: 自签名

如下图所示:

注意:如上server.crt 是证书持有人的信息,持有人的公钥,以及签署者的签名等信息。

4. 生成客户端证书

生成客户端证书与生成CA证书相似。

4.1. 先要生成私钥

使用命令:

openssl genrsa -out client.key 2048

如下图所示:

4.2 生成请求文件

使用命令:

openssl req -new -key client.key -out client.csr

如下图所示:

4.3 发给ca签名

使用命令:

openssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt

如下图所示:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 使用OpenSSL生成Kubernetes证书的介绍

    kubernetes支持Base认证/Token认证/CA认证三种,这篇文章用于记录一下CA认证所需要的最简单程度的命令. kubernetes构成 测试版本为1.10,但不限于此版本,为openssl证书较为通用的方式. 所需证书 所需要的证书相关文件的说明如下: CA证书 CA证书私钥 命令:openssl genrsa -out ca.key 2048 [root@host121 k8scert]# openssl genrsa -out ca.key 2048 Generating RS

  • PHP中使用OpenSSL生成证书及加密解密

    依赖于OpenSSL扩展 /*加密解密*/ function authcode($string, $operation = 'E') { $ssl_public = file_get_contents(DATA_PATH."/conf/cert_public.key"); $ssl_private = file_get_contents(DATA_PATH."/conf/cert_private.pem"); $pi_key = openssl_pkey_get_p

  • 使用openssl 生成免费证书的方法步骤

    一:什么是openssl? 它的作用是?应用场景是什么? 即百度百科说:openssl是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,它可以避免信息被窃听到. SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输.Netscape(网景)公司在推出第一个Web浏览器的同时,提出了SSL协议标准.其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持. 因为在网络传输的过程中,网络的数据肯定要经过w

  • OpenSSL生成v3证书方法及配置文件详解

    目录 场景 方法 场景 业务需要生成v3版的证书,而一般使用OpenSSL生成证书时都是v1版的,不带扩展属性. 方法 在使用CA证书进行签署证书时加入-exfile和-extensions选项,具体命令如下: openssl x509 -req -days 365 -sha256 -extfile openssl.cnf -extensions v3_req -in server.csr -signkey server.key -out server.crt 对应openssl.cnf配置文件

  • Java模板动态生成word文件的方法步骤

    最近项目中需要根据模板生成word文档,模板文件也是word文档.当时思考一下想用POI API来做,但是觉得用起来相对复杂.后来又找了一种方式,使用freemarker模板生成word文件,经过尝试觉得还是相对简单易行的. 使用freemarker模板生成word文档主要有这么几个步骤 1.创建word模板:因为我项目中用到的模板本身是word,所以我就直接编辑word文档转成freemarker(.ftl)格式的. 2.将改word文件另存为xml格式,注意使用另存为,不是直接修改扩展名.

  • windows下使用GoLand生成proto文件的方法步骤

    目录 下载编译器protoc 1.使用google官方protoc 2.使用三方protoc,比如我使用的gogo的protoc 设置环境变量 编写proto文件 将proto文件编译为pb.go文件 下载编译器protoc 两种方式: 1.使用google官方protoc 下载地址:https://github.com/google/protobuf/releases 2.使用三方protoc,比如我使用的gogo的protoc 下载地址:https://github.com/gogo/pro

  • PHPStudy下如何为Apache安装SSL证书的方法步骤

    一.安装SSL证书的环境 Apache安装目录:E:phpStudyPHPTutorialApache 以上为windows下测试SSL证书安装的目录,具体目录请根据自己的实际环境! 二.获取SSL证书 成功在沃通申请SSL证书后,会得到一个压缩包文件,解压后得到四个文件:for Apache.for IIS.for Ngnix. for Other Server,Apache 上需要用到 for Apache解压出来的证书文件以及自主生成的私钥.key文件. key 文件,需要找到生成 CSR

  • Java如何基于command调用openssl生成私钥证书

    在windows环境下进行的测试,前提条件,windows上需要先安装openssl. 配置环境变量,查看版本: import java.io.*; import java.util.Properties; public class OpensslCommand { private static void runCMD(String[] CMD) { java.lang.Process process = null; try { process = Runtime.getRuntime().ex

  • nginx配置https的方法示例(免费证书)

    一.我们需要什么证书 之前写过一篇<tomcat https配置方法(免费证书)>的简书(想看的可以去我的主页里面看下,这两篇之间还是有许多相关联的知识的~),里面有提到过常用证书的分类,其中nginx使用的就是PEM格式的证书,我们将其拆分开就是需要两个文件,一个是.key文件,一个是.crt文件. 二.怎样获取免费证书 这里提供两个方法: 第一种:如果你是windows用户,且有.keystore格式的证书 那么你可以使用JKS2PFX转换工具,将你的keystore证书转换为PEM证书,

  • docker获取Let's Encrypt永久免费SSL证书的方法

    一.起因 官方的cerbot太烦了,不建议使用还不如野蛮生长的acme.sh,而这里介绍docker运行cerbot获取Let's Encrypt永久免费SSL证书 二.选型 cerbot的证书不会自动刷新日期,但是acme.sh自带这功能,每天凌晨0:00自动检测过期域名并且自动续期 选择docker运行cerbot,是为了让服务器里尽量少配置和无意义的程序,方便管理.例如Let's Encrypt需要的Python2.7,git,pip我们都不需要装在宿主机内,容器就自己配置好了 原文 ht

  • Maven 生成打包可执行jar包的方法步骤

    最近IDEA打可执行Jar包搞了三天,一直失败,好好学习一下Maven-assembly,在此记录一下 1. 需求 项目打包,满足以下要求: 1.整个项目打一个Zip包下面包括应用程序.应用程序依赖的jar包.说明文档 2.项目打的jar包可以执行不同类里的Main函数 3.项目源码打的jar包要与依赖的第三方jar包分开 4.项目里的执行脚本也要一块打包并进行分类 5.document目录下的readme.txt放在压缩包的根目录下,其他的还放在这个目录下 6.打的jar包去掉不需要的目录(文

随机推荐