如何创建TLS/SSL自签名证书?

Linux基础

1 基础知识

1.1 SSL

基础知识请查阅以下章节,

如何熟悉SSL证书的基础知识?

1.2 TLS

1.2.1 TLS的介绍

– TLS,即英文Transport Layer Security的缩写,中文翻译为传输层安全协议
– TLS,用于防止两个应用程序通过网络进行数据交换时被窃听和篡改
– TLS,协议采用主从式架构模型(即C/S架构)
– TLS,由两层组成,TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)
– TLS,优势在于能与应用层协议(如HTTP、FTP、Telnet)无缝耦合

1.2.2 TLS的工作原理

– 客户端请求支持TLS协议的服务器创建安全连接并返回客户端支持的密码组合(加密密码算法和加密哈希函数),即握手开始
– 服务和从客户端提供的列表中选出可用的加密和散列函数,并通知客户端
– 客户端确认服务器颁发的证书是有效的
– 客户端使用服务器的公钥加密随机生成秘钥并发给服务器端(该私钥只能由服务器自己的私钥解密)
– 双方利用随机数生成用于加密和解密的对称秘钥,至此TLS握手结束
注:握手完毕直到连接被关闭的通讯都是安全的通讯连接

2 最佳实践

2.1 配置环境

Server,
hostname = any.cmdschool.org
ip addresses = any
OS = any

2.2 创建服务器端证书

In Server,

2.2.1 创建证书临时存放目录

mkdir ~/myca

2.2.2 创建证书颁发机构证书和密码

cd ~/myca
openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt

命令行向导如下,

[...]
Enter PEM pass phrase: ******
Verifying - Enter PEM pass phrase: ******
[...]
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Guangdong
Locality Name (eg, city) [Default City]:Dongguan
Organization Name (eg, company) [Default Company Ltd]:cmdschool.org
Organizational Unit Name (eg, section) []:Certificate Authority
Common Name (eg, your name or your server's hostname) []:
Email Address []:

注:“[…]”表示省略,以上设置的密码用于保护自签名的过程(即后面步骤中以上密码验证不通过则不能进行自签名)

2.2.3 创建服务器私钥

cd ~/myca
openssl genrsa -out hostname.cmdschool.org.key 2048

根据具体要求,我们使用不加密的签名创建服务器证书,如果你需要加密签名过程,请使用如下命令创建,

cd ~/myca
openssl genrsa -des3 -out hostname.cmdschool.org.key 2048

命令行向导如下,

[...]
Enter pass phrase for server.key: ******
Verifying - Enter pass phrase for server.key: ******

注:以上设置的秘密用于保护下面的签名步骤

2.2.4 创建用于向CA请求签名的中间证书

cd ~/myca
openssl req -out hostname.cmdschool.org.csr -key hostname.cmdschool.org.key -new

创建证书的向导如下,

Enter pass phrase for server.key: ******
[...]
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Guangdong
Locality Name (eg, city) [Default City]:Dongguan
Organization Name (eg, company) [Default Company Ltd]:cmdschool.org
Organizational Unit Name (eg, section) []:cmdschool
Common Name (eg, your name or your server's hostname) []:hostname.cmdschool.org
Email Address []:
[...]
A challenge password []:
An optional company name []:

注意:
– 秘密验证步骤通过之后才能继续创建用于向CA请求签名的CSR证书(或进行自签名的CSR文件)
– 如果使用不加密的签名创建服务器证书,此步骤将被自动跳过
– 当要求输入通用名(即Common Name,简称CN)时,请输入服务器(或代理)主机名或域名
– 证书通用名的值会与客户端访问的服务器域名进行校验,所以设置的值必须谨慎
– 如果是生产环境,请将CSR证书发给CA请求签名并且跳过后面的自签名步骤(即自签名步骤不用执行)
另外,自动创建请使用如下命令,

cd ~/myca
openssl req -out hostname.cmdschool.org.csr -key hostname.cmdschool.org.key -new -subj "/C=CN/ST=Guangdong/L=Dongguan/O=cmdschool.org/OU=cmdschool/CN=hostname.cmdschool.org"

2.2.5 创建自签名的公钥证书

cd ~/myca
openssl x509 -req -in hostname.cmdschool.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out hostname.cmdschool.org.crt -days 365

命令行向导如下,

[...]
Enter pass phrase for ca.key:

注:
– 以上输入的是骤一创建的CA密码
– 以上使用自己服务器的CA秘钥进行自签名(签名仅用于测试,不建议用于生产环境)

没有评论

发表评论

Linux基础
如何测试网络带宽?

1 前言 一个问题,一篇文章,一出故事。 笔者需要通过命令行测试出口的带宽,于是产生此文。 2 最佳 …

Linux基础
如何测试存储设备的读写IO速度?

1 前言 一个问题,一篇文章,一出故事。 笔者需要测试存储设备的读写IO速度,于是整理此文。 2 最 …

Linux基础
如何根据用户或组配置磁盘限额?

1 基础知识 1.1 Disk Quota的概念 Disk Quota用于合理分配有限的磁盘使用空间 …