本文来自作者 冰尘 在 GitChat 上分享「深入浅出 SSL 证书」,「阅读原文」查看交流实录

「文末高能」

编辑 | 文涛

网络安全是一个永恒的话题,保护网络安全有很多方法,其中应用最为广泛的就是使用 SSL 证书来保护 C/S 或者 B/S 的通信安全。

但是其实很多时候,我们并不知道如何管理和配置 SSL 证书。因此,笔者在本场 Chat 中将会和大家分享下面的话题。

  • 什么是 SSL 证书

  • 为什么要使用 SSL 证书

  • 什么是对称加密和非对称加密

  • Window 操作系统下如何管理 SSL 证书?

  • 如何从 HTTPS 网站导出 CA 证书

  • 如何开发一个 Eclipse 插件把证书导入到 Java 的 keystore。

  • 自签名证书 VS CA 证书

  • 如何通过可视化工具生成和管理公钥和私钥

1. 什么是 SSL 证书?

根据百度百科对SSL证书的定义,SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。

SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA(在有的测试环境也可能 是自签名的证书,也就是自己给自己颁发的证书),在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

2. 为什么要使用 SSL 证书

通过 Secure socket layer(SSL),能够帮助系统在客户端和服务器之间建立一条安全通信通道。SSL 安全协议是由 Netscape Communication 公司设计开发。

该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。

通过激活 SSL 协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。

下面我们举一个例子,看 SSL 是如何保证通信的安全。我们的实验就是用 Tomcat 快速搭建一个基于 HTTPS(在HTTP协议上使用SSL) 的 Web 应用,大家可以先到 Tomcat 的网站下载一个 Window 的安装包, 下载完成后,解压缩到
比如,D:\apache-tomcat-9.0.1,然后在 D:\apache-tomcat-9.0.1\webapps\examples\ssldemo.html,内容如下:

<!DOCTYPE HTML><html lang="en"><head>
<meta charset="UTF-8">
<title>Hello SSL</title>
</head>
<body>
<p>
<h3>SSL Example</H3>
<p>大家好,我是冰尘!!!</p></body></html>

然后启动 Tomcat9,在打开浏览器之前,请先下载一个名字叫做Fiddler的软件,百度百科对 Fiddler 的介绍如下:

Fiddler 是一个 http 协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断点,查看所有的“进出” Fiddler 的数据(指cookie,html,js,css 等文件,这些都可以让你胡乱修改的意思)。

Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露 http 通讯还提供了一个用户友好的格式。

我们可以在 https://www.telerik.com/fiddler 这个地址下载这个免费的工具并安装。

假设我们已经安装并打开了 Fiddler,在浏览器输入下面的地址,我们将看到下面的内容:http://localhost:8080/examples/ssldemo.html

这个时候 Fiddler 监测到的内容如下:

根据 Fiddler 截获的信息,我们知道在客户端和服务器传输的信息完全是明文,如果有不怀好意的人或者黑客,截取了浏览器和这个站点之间的所有的 http 请求的话,其上面传输的信息,所见即所得,被一览无余。

在浏览器和 Web 服务器之间,如果传输只是一般的文本信息,比如 CSDN 的博客等,问题也不大。

但是如果传输的是银行账号和密码呢?如果传输的是身份证信息或者信用卡信息呢?如果没有一种很好的机制去保护的话,如果被监听到了,后果将是灾难性的。

那如何破这个局呢?其中一种很常见的方式,就是搭建一个基于 SSL 的 Web 服务器,让所有的信息通过https协议来传输。

下面笔者来配置一下 Tomcat 服务器,让其来支持 https,因为本 chat 更偏向于实战,所以笔者列出了其具体步骤。

· 1. 创建一个SSL的证书

假设我们机器上已经安装了 JDK 并配置了 JAVA Home,然后打开命令行,确保 keytool 命令能用,如果不用请到 JDK 的安装目录下 bin 子目录寻找。在命令行中输入下面的命令:

keytool -genkey -alias tomcat -keyalg RSA -keystore tomcat.jks

然后按照提示,输入 first name and last name 等相关信息,这样就会生成一个证书对并存储到 tomcat.jks 文件中,另外在生成 tomcat.jks 文件的时候,其会让我们提示输入密码,假设输入的密码是:changeit

· 2. 保存好JKS文件

把 tomcat.jks 拷贝到Tomcat的安装目录下,笔者的安装目录是:D:\apache-tomcat-9.0.1,所以笔者将其拷贝到 D:\apache-tomcat-9.0.1\conf\tomcat.jks。 当然也可以不用拷贝,但是需要知道tomcat.jks文件的全路径,因为这个路径在后面需要用到。

· 3. 配置 Tomcat 的 Server.xml 文件

在Tomcat的安装目录下打开 server.xml 文件,笔者的电脑上是,D:\apache-tomcat-9.0.1\conf\server.xml 文件,然后编辑这个文件。把已有的8080端口的 Connector 注释起来,然后加入下面新的8443端口的 Connector。

文本形式的配置如下:

 <Connectorprotocol="org.apache.coyote.http11.Http11NioProtocol"port="8443" maxThreads="200"scheme="https" secure="true" SSLEnabled="true"keystoreFile="D:/apache-tomcat-9.0.1/conf/tomcat.jks" keystorePass="changeit"clientAuth="false" sslProtocol="TLS"/>

· 4. 重启启动 Tomcat 服务器

在浏览器输入,https://localhost:8443/examples/ssldemo.html。这个时候,我们发现其走的 https 协议,也就是用 SSL 保护了的 http 协议。这个时候在回头来看 Fiddler 监听的信息的结果。

从上面的结果来看,我们的 Fiddler 监听到的已经是加过密的信息,看了这些信息,压根就不知道 Web 服务器向浏览器传输了什么信息,因为其是密文的,只有知道其秘钥的工具才能把其破解成明文。这样妈妈再也不同担心我们在网上传输个人的信息了。

3. 什么是对称加密和非对称加密?

说起SSL证书,就不得不提对称加密和非对称加密。下面分别阐述。

3.1 对称加密

对称加密算法(Symmetric encryption)是一种计算机加密技术,使用加密密钥来伪装信息。它的数据转换使用了一个数学算法和一个私有密钥,这导致无法从加密后的消息中推出原始消息。

对称加密是一种双向算法,只要有相同的私钥,通过数学算法就能把以前用一把私钥加密的信息还原成最初的原始信息。对称加密算法的最大特点就是加密数据和解密数据使用的是同一个秘钥。

举个简单的例子,大家都喜欢看谍战剧,谍战剧里面经常会看到某一方截获了另外一方的密电,这个密电就是经过某一种方式加密过后的信息,那为什么要加密呢?

因为电波是朝四面八方扩散的,只要能够接收电波,就能把电波里面附带的信息记录下来,如果不加密,特别是军事情报,那岂不是太容易被截取并泄密了吗?所以需要加密。

加密的方式有多种多样,举个最简单的加密方式,比如如果准备用英文单词写的电报的话,就按照字母表的顺序混淆一下,比如把 a替换成d,b替换成e,c替换成f等,总之就是把当前的字母替换为后面第三位的字母,这种替换规则就是一个秘钥。

当接受方接收到这个信息的时候,因为预先知道这个秘钥,所以,接到密文后,反向替换即可,即把密文中的d,还原成a; e还原成b,f还原成c。

因为加密解密用的同一份秘钥,加密和解密通过秘钥完全对称的,所以叫做对称加密。

目前比较通用和常见的对称加密算法主要有下面的种类:

  • AES

  • Blowfish

  • DES

  • 三重 DES

  • Serpent

  • Twofish

千言万语抵不过一幅图,下面笔者从网上找了张经典的图,大家一看图就应该明白了什么时候对称加密算法。

3.2 非对称加密

既然对称加密算法这么强大,那为什么还要使用非对称加密算法呢?那什么又是非对称加密算法呢?

因为对称加密算法有一个最不安全的地方,就是秘钥的分发;如何保证秘钥能从A处共享给B的时候,特别是复杂和万能的互联网上,如何保证在交换秘钥的时候不被窃听到?

因为对于对称加密算法,只要秘钥被窃听到了,其被这个秘钥加密的任何密文就几乎不费吹灰之力就被破解出来了。 那如何避免这种风险呢?这个时候非对称加密算法就粉墨登场了。

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。

公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。

因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。那为什么这种机制就能很好的解决秘钥传输的问题呢?

举个例子,假设有通信的双方((A和B),需要交换一个秘密信息。A会生成 一个秘钥对,公钥A和私钥A; B也会生成一个秘钥对,公钥B和私钥B,假设A和B都能把自己私钥保护的滴水不漏,只要A和B两个人自己知道自己各自的私钥,其他任何人都不知道,就能保证信息交换的安全,交换的过程如下:

  • 首先A把自己的公钥发送给B,B也把自己的公钥发送给A

  • A把要发送给B的信息,用B的公钥进行加密,然后发送给B,因为只有B有B公钥所对应的私钥B,所以即使被传输的信息被第三方监听到,也没有关系,因为只要私钥B才能解密。

  • B收到从A发送过来的用公钥B加密的信息后,用自己独一份的私钥B把信息解密;然后根据A的信息,知道某一个重要的秘密,为了对A进行回复, B就会用A给公钥把需要回复的信息加密发送给A

  • 因为只有A有A公钥所对应的私钥A,所以即使被传输的信息被第三方监听到,也没有关系,因为只要私钥A才能解密。

是不是整个通信就非常安全了。因为任何第三方即使在公钥A和公钥B相互交换的过程中知道到了公钥A和公钥B,也没有用,因为私钥A和私钥B没有相互交换,只有各自自己知道。从而保证了通信双方通信的安全。

目前比较通用和常见的非对称加密算法主要有下面的种类:

  • RSA

  • EIGramal

  • Rabin

  • 椭圆曲线密码

千言万语抵不过一幅图,下面笔者从网上找了张经典的图,大家一看图就应该明白了什么时候非对称加密算法.

4. Window 操作系统下如何管理 SSL 证书?

一般情况下,我们只知道我们可以通过浏览器打开和查看当前账号系统下的一些证书的信息。

那么这些证书信息是否还有其他的方式打开并查看呢?其实,Window 操作系统自身也提供了一个存储证书和管理证书的工具,就是 mmc 工具。操作的简要步骤如下:

Step 1. 在 run 命令中输入 mmc 或者在 cmd 的命令行中输入 mmc

Step 2. 将会打开一个 mmc 的管理台

Step 3. 在 File 菜单中选择 File->Add or Remove Snap-ins 选项,将会打开下面界面,我们选择并添加“Certificates”选项。

Step 4. 选择一个账号类型,一般选择 My User account 即可。

Step 5. 这样就能把所属的账号类型下面的证书列举出来了。

Step 6. 可以通过下图的方式导入证书(以根证书为例子)

Step 7. 可以通过下图的方式导出证书(以根证书为例子)

没有想到 Window 操作系统上还有这么方便的工具,可以通过可视化工具来进行 Window 的 SSL 证书的导入导出管理。

另外,还给大家分享另外一个在 Windows 系统上可以导入和导出证书的地方,那就是IE浏览器本身。

操作方法和上面有点类似,就不再赘述,具体步骤如下图: 打开IE→ Tools → Internet Options → Content →Certificate

5. 如何从 HTTPS 网站导出 CA 证书

我们在访问 https 的时候,对于直接用 Java,.NET, Python 等语言开发的程序的时候,我们需要调用并访问 HTTPS 网站的时候,需要提供访问网站的CA证书,这个时候客户端才能成功访问系统网站,那么有什么好的方法和工具能够帮助我们快速的从我们需要访问的网站上把 CA 证书导出来呢?

幸运的是,有热心于开源项目的行业人士为我们提供了一个方便简单的工具:portecle; 利用这个工具我们更能轻松的从 HTTPS 网站上导出 SSL 的 CA 证书,大家应该等待不急了吧。OK,不和大家饶弯子了,直接进入具体操作步骤。

Step1. 下载该软件,大家可以从下面的网站下载这个软件。

http://sourceforge.net/projects/portecle/files/latest/download 当前最新的版本是1.10。

Step2. 下载完后,解压缩后,目录结构如下:

Step3. 安装 JDK 后,在环境变量里面配置 JAVA_HOME(具体步骤,请在 Google 或者百度里面搜索“java home 设置”)因为不是本节的重点。

配置完后,双击 portecle.jar 文件,如上图,将会弹出下面的界面。

Step4. 点击下面的菜单项,弹出“Examine SSL/TLS Connection” 窗体

Step5.   咱们以访问  https://developers.google.com/google-apps/calendar/v3/reference/acl/delete 为例子,输入如下图所示意的参数,然后点击OK按钮,将会弹出 Step6 中所示意的窗体。

Step6. 在弹出的证书详情的窗体中,我们可以看到下面的界面,见下图

Step 7 . 在 Step6 附图中的“PEM Encoding”按钮,将会弹出下面的窗体。

Step 8. 点击“Save”按钮,保存证书。

Step 9. 点击 Step6 页面顶端的右向箭头(→),重复步骤七到八,把剩下的两个证书也导出来。至此,恭喜各位看官,你的 HTTPS 的 SSL 的 CA 证书导出成功了。

6. 开发一个 Eclipse 插件把证书导入到 Java 的 keystore

我们在开发或者使用 SSL 的过程中,很多的软件需要我们提供 java 的keystore,特别是一些基于 Java 的中间件产品。我们常规的做法是 JDK 自带的工具命令(keytool)去做,比如,下面的例子,

keytool -import -v -alias EnTrust2048 -file D:\certs\EnTrust2048.cer -keystore D:\certs\test.jks
keytool -import -v -alias EntrustCertificationAuthorityL1C -file D:\certs\EntrustCertificationAuthorityL1C.cer -keystore D:\certs\test.jks
keytool -import -v -alias test.com -file D:\certs\Service-now.com.cer -keystore D:\certs\test.jks

但是这种方式比较繁琐,假设我们一个文件夹下面有100个SSL的证书,那么我们就要输入100个类似于上面的命令。

如果是文件夹里面套文件夹里面还有证书,就更麻烦。那么有没有好的办法呢? 笔者就跟大家分享一下如何用java的程序代码去实现。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
import javax.security.auth.x500.X500Principal;  public class KeyStoreHelper {  public static void createTrustJKSKeyStore(final String originalTrustFolder,  final String jksTrustStoreLocation, final String password) {  File keyStoreFile = new File(jksTrustStoreLocation);  if (!keyStoreFile.exists()) {  try {  KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());  keystore.load(null, password.toCharArray());  File trustedFolder = new File(originalTrustFolder);  File[] certs = trustedFolder.listFiles();  if (certs != null) {  for (File cert : certs) {  CertificateFactory factory = CertificateFactory.getInstance("X.509");  try {  X509Certificate certificate = (X509Certificate) factory.generateCertificate(new FileInputStream(cert));  X500Principal principal = certificate.getSubjectX500Principal();  LdapName ldapDN = new LdapName(principal.getName());  List<Rdn> rdns = ldapDN.getRdns();  for (Rdn rdn : rdns) {  String type = rdn.getType();  if (type.equals("CN")) {  keystore.setCertificateEntry((String) rdn.getValue(),certificate);  break;  }         }  } catch (Exception ex) {  continue;  }  }  }  FileOutputStream fos = new FileOutputStream(jksTrustStoreLocation);  keystore.store(fos, password.toCharArray());  fos.close();  } catch (Exception exp) {  }  }  }  /** * @param args */  public static void main(String[] args) {  KeyStoreHelper.createTrustJKSKeyStore("D:\\cacerts", "D:\\cacerts\\test.jks", "test123");  }  }

上面这个 Java 类可以帮助我们做这个事情。同时我们还可以依据上面这个核心类,发一个可视化的 Eclipse 插件,这样就更加方便,下图就是笔者自己开发的一个简单的自娱自乐的 Eclipse Plugin 插件的界面设计(仅供自娱自乐)。

程序代码结构如下:

因为 Eclipse 插件开发历史比较悠久,而且在当前的行业中能够用到的公司不多,所以也就不再详细赘述如何进行 Eclipse 插件开发。如果笔者想进一步的了解的话,可以在 GitChat 结束和我一起探讨。

笔者已经把这个简单的插件的源代码上传到了下面的地址,只是纯玩性质的一个插件,功能能够正常工作,但是如果大家有需要的话,笔者可以进一步的完善和细化。

7. 自签名证书 VS CA 证书

所谓的自签名证书就是自己给自己签发证书;在本文的第2个章节,笔者曾经自己在 Tomcat 上搭建了一个 https 的网站,这个 https 的网站就是用的是自签名的证书,假如用IE浏览器打开上面的这个地址,我们将会看到其证书的情况: https://localhost:8443/examples/ssldemo.html。

第一次打开的时候,其会提醒我这是一个不安全的网站:

如果我们进一步点击“Continue to this website (not recommended). ”, 然后浏览器才会真正的进入这个页面。接着在浏览器网址的上方,我们进一步点击查看证书,就会发现,这个证书是 bingcheng 老师自己颁发给自己的。

那为什么会有这个提示呢?因为上面网站的SSL证书,是我自己用工具生成的,没有被第三方的权威机构或者公司的CA签署,所以浏览器认为是不安全的网站,所以弹出这个页面让用户引起注意。那么什么是CA证书呢?

CA证书就是通过第三方有资质的权威的公司或者机构,先把自己的证书请求发送过去,然后第三方的权威CA就把发过来的证书请求,通过他们的CA的根证书或者二级三级等下级代理证书把发送过来的证书请求标注上颁发机构;当然在提交证书申请的时候,需要提供申请方的网站或者公司的相关证明资料,证明这个网站的证书就是给这个网站本身用的,而不是一个仿冒的公司。目前比较权威的第三方CA一般都自动集成在了浏览器里面。目前世界上最知名的8家SSL证书CA供应商如下:

  • VeriSign

  • GeoTrust

  • Comodo

  • Digicert

  • Thawte

  • GoDaddy

  • Network Solutions

  • GlobalSign

下面看一个具体的例子,以京东的网站为例子,看看京东网站的SSL证书是哪个权威CA颁发的。

从上图可以看出,京东的网站不是一个自签名的证书,而是有第三方的权威CA认证公司GlobalSign颁发和签署的。

那么我们在工作当中,有的时候老板会让我们去生成一个SSL证书的请求,然后让第三方的CA帮忙签署,那这个时候,我们应该如何去做呢?

生成SSL证书请求有很多的方法,笔者是做JAVA开发出身的,就介绍一种最为简单的方法,就是直接利用 JDK 自带的工具去生成一个证书请求。

假设我们要对一个 www.51talkdocter.com 申请一个由权威 CA 颁发的 SSL 证,我们就需要执行下面的命令:

C:\Users\bingcheng>keytool -genkey -alias 51talkdocter -keyalg RSA -keystore www.51talkdocter.com.jks
Enter keystore password:
Re-enter new password:
What is your first and last name?[Unknown]:  www.51talkdocter.com
What is the name of your organizational unit?[Unknown]:  51talkdocter
What is the name of your organization?[Unknown]:  test
What is the name of your City or Locality?[Unknown]:  beijing
What is the name of your State or Province?[Unknown]:  beijing
What is the two-letter country code for this unit?[Unknown]:  cn
Is CN=www.51talkdocter.com, OU=51talkdocter, O=test, L=beijing, ST=beijing, C=cncorrect?[no]:  yes

上面的命令会生成一个私钥,然后利用这个私钥去生成一个证书请求。命令如下并输入上个命令中曾经设置过的密码:

keytool -certreq -keyalg RSA -alias 51talkdocter -file www.51talkdocter.com.csr -keystore www.51talkdocter.com.jks

执行完上面的命令后,就会生成 www.51talkdocter.com.csr 一个CA证书签署申请文件,然后把这个文件发送给上面提到任何一家权威的CA机构或者其他的CA 机构去签署我们的申请文件,签署完成后,就能正常使用了。

8. 如何通过可视化工具生成和管理公钥和私钥

一般情况下,大家能想到管理和生成SSL证书的方法就是 OpenSSL 程序或者用 JDK 自带的 keytool 命令,但是这两种工具虽然功能强大,但是用户的可操作性并不好,需要用户记住并输入一些命令,而且也不是特别的直观。

那么有没有一个好的证书管理工具,能帮我们方便的管理证书,方便的生成证书请求,方便的对证书进行自签名,方便的把证书以一种格式导入进来,然后以自己想要的另外一种格式导出去呢?

答案就是,XCA(X Certificate and key management),XCA 是一个开源的工具,底层还是基于 openSSL 的类库和 API 的。下面是其界面.

那么如何安装呢?

  • Step1 . 打开浏览器,输入下载地址

  • Step2 .  然后点击 “direct link” 或者 “mirror” 标签,下载最新的版本,最新的版本是:1.3.2

  • Step3. 安装下载后的exe文件

  • Step4. 这样在你的开始菜单中,就能找到 xca 的目录,打开 xca 的程序即可。

万事俱备了,那我们就开始入门使用了。我们就以上面的第7部分为例子,用 XCAwww.51talkdocter.com 创建证书请求,演示一下如何通过 XCA 也能达到同样的目的。

Step1.  打开XCA

Step2. 如果是第一次打开,请点击 File→New Database

  • Step3. 选择证书数据存储的位置并命名存储文件的名字。

Step4. 设置密码保护证书数据

Step5: 鼠标点击到“Certificate Signing Request” 分页,并点击右边的“New Request”,将弹出下面的窗体。

Step6 :“Source” 标签页保持不变,用默认的模板即可,点击“Subject”标签页,输入证书的信息,比如内部名,组织名,组织单元名字,国家名,省份以及通用名字。

一般内部名和通用名字填一样,而且通用名一般都需要填写,因为这个是用来标示当前证书在你的组织内部的唯一性;一般组织名和组织单元名一般和你的公司和部门相吻合。

比如,你属于 ibm 的信息部(IT部门),那么你的组织名(organizationName)可以填写成:ibm,为了和上面的用 jks 生成的保持一致,我输入的是test。

你的 organizationUnitName 可以填写成 IT,表示的是IT部门,我在这写成了51talkdocter,通用名(common name)和内部 名字取决你证书的用途,主要用来描述你证书的功能和用途的。

我的这个例子中,主要是为www.51talkdocter.com域名申请的,所以我写成www.51talkdocter.com。
具体信息如下:

Step7. 生成保护证书的秘钥:因为我们是生成证书请求,那么我们需要生成一个证书对,即私钥和公钥,上面Step6生成的信息是在公钥中可以看到的。

(1) 如果这个证书将来会用到公网的服务器上去,那么这个证书请求需要发送到第三方得到权威机构(Certificate Authentication)

进行签名,就好比我们需要把我们的户口本拿到当地公安局去办身份证一样,你可以拿这个身份证去买火车票,去办银行卡,第三方的机构承认,因为是公安局办的,是大家都承认的第三方权威机构办的,这时的公安局就相当于我们 SSL 证书的颁发机构,当前业界比较权威就是 Thawte,Verisign 公司等。

(2) 如果这个证书只是企业或者组织内部使用,一般用自己组织内部或者个人认可的证书中心去签名即可,这就好比你那着你的劳动合同去公司申请工牌一样,你这个工牌只能在你组织或者公司内部使用,你不能拿你的工牌去做火车,道理一样的。

那么私钥是做什么的呢?私钥就是用来保护信息用的,前面我们提到了我们一般把公钥告诉别人,让别人用我们的公钥去加密数据,然后不告诉别人我们的私钥,这样别人用我们的公钥加密的数据,只有我们自己能解密开,因为默认情况下,私钥只有我们自己知道;

所以这个私钥一定要保护好,而且必须有密码器保护,这就是为什么我们在 Step4 需要设置密码的原因了。

如果要生成证书请求的私钥,就需要点击当前弹出页面的“Generate a New Key” 按钮,就会弹出一个窗口来生成包含证书请求的私钥,见下图:

Step8. 在弹出的 New Key 窗口中点击 “Create” 按钮,在 Subject 标签页的右下方点击 “OK” 按钮,这个是私钥和证书请求就都创建好了。

Step9. 查看证书信息: 在“Certificate Signing Request”标签页,选择你申请的证书,然后双击,将会弹出一个页面,点击“Subject”标签页,将会看到证书的基本信息。

从上图可以看出,生成了一个 www.51talkdocter.com 的证书请求,其 Signed 列的状态为 “Unhandled”,表示其为一个等待被CA签署的证书请求。

Step10. 查看私钥基本信息:点击 “Private keys” 标签页面,我们将会看到我们创建的私钥匙的信息。

一个生成 www.51talkdocter.com 的证书请求就这么愉快的被 XCA 工具给完成了,而且所见即所得,非常容易的反过头来查看证书的信息,而且对于我们理解 SSL 的公钥和私钥的概念以及其表达方式也特别的有用。

上面只是XCA的例子而已,笔者希望能够通过这个例子让大家举一反三,其实其功能远远不止这些,大家可以在看完笔者的 GitChat,如果有兴趣的话,可以继续探索,也可以参阅我的博客专栏。

9. 总结

唠唠叨叨了这么长的篇幅,写了将近1万字的文章,就是希望能够在实战上真正帮助读者少走弯路,少踏一些坑。由于水平和时间有限,纰漏在所难免,如果有任何纰漏的地方,请读者留言与本人联系。

福利

「阅读原文」看交流实录,你想知道的都在这里

它广泛用于保护 C/S 、B/S 通信安全,大多数人却不知道如何管理配置它相关推荐

  1. ANSI/ESD S541-2019 用于保护静电放电敏感物品 - 包装材料,中文,英文发布

    ANSI/ESD S541-2019 用于保护静电放电敏感物品 - 包装材料,中文,英文发布 ANSI-ESDS541-2018用于保护静电放电敏感物品-包装材料-完整英文版(28页).pdf-行业报 ...

  2. GB/T 18655-2018 用于保护车载接收机的限值和测量方法 学习思维导图

    专栏 专注介绍电磁兼容(EMC)的相关知识,算是对本人浸染 EMC 专业十余年的一个阶段小结 . 本文比较 "简单",就是 GB/T 18655-2018(CISPR 25:26) ...

  3. 高效轻量级集成区块链(ELIB)用于保护物联网安全和隐私

    An efficient Lightweight integrated Blockchain [ELIB] model for IoT security and privacy 区块链背景简述 模型分 ...

  4. 让每块火腿都留下“数字痕迹”西媒:区块链将用于保护食品安全

    西班牙<阿贝赛报>网站近日报道称,区块链技术正在成为保护食品安全的"有力武器". 由于在数据登记和监控方面享有安全性.匿名性和速度,区块链正进入到越来越多的商业模式中. ...

  5. SSM-jsp页面放在web-INF下受保护,读取出现404页面tomcat获取不到资源-问题解决配置docBase

    今天在与终端调接口时,遇到的问题,终端那边说我给的相对地址不全,然后把他那边获取的路径信息给我,查了下,路径没有错误,但确实打不开,网页显示404, 配置:tomcat - server.xml 中 ...

  6. 六月再见,七月你好!

    一天很短,24小时,稍纵即逝,短到来不及拥抱第一抹阳光,就要迎接落日的余晖. 一年很短,365天,如白驹过隙,短到来不及细细品味春天的生气,就要面对寒冬的风霜. 一生很短,短短几年,一睁一闭就过了.短 ...

  7. 从玉农业蔬菜标准化-林裕豪:致力食品安全和质量管理体系

    从玉农业蔬菜标准化-林裕豪:致力食品安全和质量管理体系 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 哲商对话 万赢信采编:"我们相信管理体系的建立和贯彻 ...

  8. keycloak 认证服务

    文章目录 1. 概述 1.1 架构 1.1.1 认证流程 1.1.2 认证服务 1.2 术语 1.2.1 资源服务器(Resource Server) 1.2.2 资源(Resource) 1.2.3 ...

  9. ITN网络课程笔记(十七)(完)

    十七.构建小型网络 十七.构建小型网络 1.小型网络中的设备 1.1.小型网络拓扑 1.2.小型网络的设备选择 成本 端口/接口的速度和类型 可扩展性 操作系统的功能和服务 1.3.小型网络的IP编址 ...

最新文章

  1. 从传统运维到云运维演进历程之软件定义存储(一)
  2. Java命令行运行参数说明大全--转
  3. JavaFX 中使用多线程与保证 UI 线程安全
  4. POJ - 1958 Strange Towers of Hanoi(线性dp)
  5. WebRTC Linux ADM 实现中的符号延迟加载机制
  6. HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)
  7. 数据驱动科技赋能,东吴证券打造数据中台“九大能力”
  8. Dom4j 解析Xml文档及 XPath查询 学习笔记
  9. OGRE源代码resource分析
  10. java web请求转发_Javaweb请求转发及重定向实现详解
  11. ECSHOP首页调用指定分类推荐商品/热卖商品/新品商品
  12. Kubernetes 小白学习笔记(3)--物理机、虚拟化、容器化、云原生
  13. 利用jsonp跨域访问
  14. 内存数据库将数据保存在计算机内存,内存数据库
  15. Android webview 播放视频及全屏
  16. 在Python应用程序中将Excel转换为HTML操作指南
  17. 一、注册功能怎么测试
  18. java还原混淆代码,android混淆 android如何将混淆代码还原?
  19. miui修改Android,无法修改小米MIUI设备中的系统设置
  20. C++基于QT的模仿宝石迷阵游戏源码

热门文章

  1. OPENCV图片打码
  2. 总结二十:程序员激励的基本因素
  3. 【Pandas】Pandas数据分析题
  4. 大家都在聊内卷,究竟内卷是什么意思,互联网行业真的内卷了么?
  5. Win10安装配置Spark3.0.2+单机版hadoop+JDK并运行实例+安装运行Docker
  6. wordpress php7 报错,Use of undefined constant taotag-assumed 'taotag'知更鸟begin主题PHP7.0报错WordPress5.2...
  7. 2022年,软件测试自学指南(持续更新)
  8. 服务器运维相关知识,服务器维护的基础知识(上)
  9. QQ生肖星座关系测试
  10. 在龙芯3a5000处理器上进行qt-5.11.3源码编译流程与遇到的问题