使用openssl 生成免费证书

阅读目录算法

一:什么是openssl? 它的做用是?应用场景是什么?浏览器

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

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

由于在网络传输的过程当中,网络的数据确定要通过wifi路由器对吧,那么咱们经过路由器作些手脚咱们就能够拿到数据,所以openssl的做用就是避免信息被窃听到。网络

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

1.1 什么是非对称加密?网站

非对称加密是用密钥对数据进行加密,而后咱们可使用另外一个不一样的密钥对数据进行解密。这两个密钥就是公钥和私钥。加密

咱们根据私钥能够计算出公钥,可是咱们根据公钥计算不出来私钥的。私钥通常是有服务器掌握的,公钥则是在客户端使用的。spa

注意:非对称加密的具体算法咱们这边不作研究。开放源代码

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

以下图所示:

相关文章
相关标签/搜索