SSL证书的一些基本知识

120次阅读

共计 3117 个字符,预计需要花费 8 分钟才能阅读完成。

1 问题

  • 什么是公钥,什么是私钥?
  • keytool 和 openssl?
  • crt/pem/key/csr 都是什么?
  • Linux 证书签发步骤

2 公钥和私钥

  • 公钥是公开的,私钥是保存在自己本地的
  • 通信双方各有一套公钥和私钥
  • 公钥加密的数据只有私钥可以解密
  • 私钥加密的数据只有公钥可以解密

假如你用 Github 的话,应该注意到 Github 链接有俩种方式。一种是https,一种是ssh,通过https经常需要输密码,而通过 ssh 则不需要。回忆你设置 ssh 的步骤,本地生成了一个密钥对,并将公钥上传到了 Github。每次传输用自动本地私钥加密,服务器用你上传的公钥解密,就不需要手动输入密码了。

3 keytool / openssl

keytoolopenssl是俩个证书管理工具,keytooljava JDK自带的证书管理工具,使用keytool可以生成密钥,创立证书。只需装了jdk,并正确设置了环境变量,即可以之间通过命令行执行keytool命令来管理证书。
openssl则是一个开源的安全套接字层密码库,功能比keytool更加丰富。

4 crt/pem/key/csr都是什么

证书(Certificate): *.cer *.crt
私钥(Private Key): *.key
证书签名请求(Certificate signing request): *.csr

至于pemder,是编码方式,以上三类均可以使用这两种编码方式,因此.pem.der不一定是以上三种(Cert,Key,CSR)中的某一种

pem: base64编码

der: 二进制编码

可以使用以下方法简单区分带有后缀扩展名的证书文件:

  • .DER 或 .CER 文件: 这样的证书文件是二进制格式,只含有证书信息,不包含私钥
  • .CRT 文件: 这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与 DER及CER证书文件相同。
  • .PEM 文件: 这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 .PEM 文件如果只包含私钥,一般用.KEY文件代替。
  • PFX 或 .P12 文件: 这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。

也可以使用记事本直接打开证书文件。如果显示的是规则的数字字母,例如:

—–BEGIN CERTIFICATE—–
MIIE5zCCA8+gAwIBAgIQN+whYc2BgzAogau0dc3PtzANBgkqh......
—–END CERTIFICATE—–

那么,该证书文件是文本格式的。

  • 如果存在——BEGIN CERTIFICATE——,则说明这是一个证书文件。
  • 如果存在—–BEGIN RSA PRIVATE KEY—–,则说明这是一个私钥文件。

5 Linux 自签名生成证书

x509证书通常会用到三类文:key,csr,crt

*.key:密钥文件,一般是SSL中的私钥,通常是rsa算法,分带口令和不带口令的版本;

*.csr:证书请求文件,里面包含公钥和其他信息,通过签名后就可以生成证书;用于向证书颁发机构申请crt证书时使用,服务器配置时不会用到;在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥;

.crt, .cert:CA认证后的证书文件,包含公钥,签名和其他需要认证的信息,比如主机名称(IP)等;

*.pem:里面一般包含私钥和证书的信息;

我们自签名证书配置,虚拟主机需要的是 .crt证书,和不带口令的SSL Key的.key文件;

5.1 生成CA证书

# 1、生成CA根证书私钥
$ openssl genrsa -des3 -out ca.key 2048
Generating RSA private key, 2048 bit long modulus
.....................................................+++
........................................+++
e is 65537 (0x10001)
Enter pass phrase for ca.key: #123456768
Verifying - Enter pass phrase for ca.key: #123456768
$ ls
ca.key

# 可以通过以下方法生成没有密码的key
$ openssl rsa -in ca.key -out ca.key
Enter pass phrase for ca.key:
writing RSA key
$ ls
ca.key
# ca.key就是没有密码的版本了

# 2、通过CA根私钥签发CA根证书
$ openssl req -new -x509 -key ca.key -out ca.crt -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
$ ls
ca.crt  ca.key

这样是生成 rsa 私钥,des3 算法,openssl 格式,2048 位强度。ca.key 是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。

5.2 生成服务端证书

# 1、生成服务端证书私钥
$ openssl genrsa -out server.key 2048
# 2、生成签发请求csr
$ openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=shaanxi/L=xian/O=srelife/OU=srelife/CN=*.srelife.cn"
$ ls
ca.crt  ca.key  server.csr  server.key
# 3、用CA证书签发服务端证书
# -CA选项指明用于被签名的csr证书
# -CAkey选项指明用于签名的密钥
# -CAserial指明序列号文件
# -CAcreateserial指明文件不存在时自动生成
$ openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
Signature ok
subject=/C=CN/ST=shaanxi/L=xian/O=srelife/OU=srelife/CN=*.srelife.cn
Getting CA Private Key
ca.crt  ca.key  ca.srl  server.crt  server.csr  server.key

完成证书生成

最后生成了私用密钥:server.key 和本身认证的SSL证书 server.crt

证书合并:

cat server.key server.crt > server.pem

SSL证书的一些基本知识

正文完
 
mervinwang
版权声明:本站原创文章,由 mervinwang 2024-01-15发表,共计3117字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
文章搜索