阅读 91

关于自签SSL证书的一些小知识汇总

1 问题

  • 什么是公钥,什么是私钥?

  • keytoolopenssl是什么?

  • 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 生成 key

[root@VM-1-14-centos key]# openssl genrsa -des3 -out server.key 2048 Generating RSA private key, 2048 bit long modulus ...........+++ ....+++ e is 65537 (0x10001) Enter pass phrase for server.key: Verifying - Enter pass phrase for server.key: [root@VM-1-14-centos key]# ls server.key 复制代码

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

可以通过以下方法生成没有密码的key:

[root@VM-1-14-centos key]# openssl rsa -in server.key -out server.key Enter pass phrase for server.key: writing RSA key [root@VM-1-14-centos key]# ls server.key 复制代码

server.key 就是没有密码的版本了。

5.2 生成CA的crt

[root@VM-1-14-centos key]# openssl req -new -x509 -key server.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 []: [root@VM-1-14-centos key]# ls ca.crt  server.key 复制代码

生成的 ca.crt 文件是用来签署下面的 server.csr 文件。

5.3 生成csr

[root@VM-1-14-centos key]# openssl req -new -key server.key -out server.csr 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]:CN State or Province Name (full name) []:Shaanxi Locality Name (eg, city) [Default City]:Xi'an Organization Name (eg, company) [Default Company Ltd]:cloudcared Organizational Unit Name (eg, section) []:section Common Name (eg, your name or your server's hostname) []:www.ssltest.com Email Address []:honest1y@cloudcared.cn   Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@VM-1-14-centos key]# ls ca.crt  server.csr  server.key 复制代码

须要依次输入国家,地区,组织,Email。最重要的是common name,能够写你的名字或者域名。

若是为了https申请,这个必须和域名吻合,不然会引起浏览器警报。生成的 csr 文件交给 CA签名 后造成服务端本身的证书。

5.4 生成crt

CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。

[root@VM-1-14-centos key]# openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt Signature ok subject=/C=CN/ST=Shaanxi/L=Xi'an/O=cloudcared/OU=section/CN=www.ssltest.com/emailAddress=honest1y@cloudcared.cn Getting CA Private Key [root@VM-1-14-centos key]# ls ca.crt  ca.srl  server.crt  server.csr  server.key 复制代码

输入key的密钥后,完成证书生成。

-CA 选项指明用于被签名的csr证书

-CAkey 选项指明用于签名的密钥

-CAserial 指明序列号文件

-CAcreateserial 指明文件不存在时自动生成

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

证书合并:

cat server.key server.crt > server.pem 复制代码


作者:Honest1y
链接:https://juejin.cn/post/7023952398334820359

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐