数字证书

  • ssh-keygen生成的密钥对:私钥 id_rsa 、公钥 id_rsa.pub ,一般用于登录系统。
  • 数字证书颁发机构(Certificate Authority,CA)拥有自己的私钥、公钥

签发证书的步骤

  • 首先准备三个东西:私钥,公钥,个人信息(域名国家机构地区巴拉巴拉..)

  • 把公钥+个人信息交给CA机构,CA机构用他的私钥给我们的 id_rsa.pub + 个人信息 加密,生成数字证书(有时用.pem的文件存储),证书包含了CA的公钥信息+我们的公钥+我们的个人信息。

  • 这时我们就拥有了:私钥(aoye.info.key)、公钥(aoye.info.pub)、数字证书(aoye.info.pem 又时候也用.cer)

  • 客户端向服务器发出加密请求,服务器用我们的私钥加密网页以后,连同本身的数字证书,一起发送给客户端。客户端(浏览器)的”证书管理器”,有”受信任的根证书颁发机构”列表。客户端会根据这张列表,查看解开数字证书的公钥是否在列表之内,来判断改数字证书是否是权威机构签发的。

  • 然后客户端用数字证书里面的我们的公钥解开网页内容展示给用户。

openssl自签证书

展示help说明

[root@drools-service ~]# openssl genrsa -help
usage: genrsa [args] [numbits]
-des encrypt the generated key with DES in cbc mode
-des3 encrypt the generated key with DES in ede cbc mode (168 bit key)
-idea encrypt the generated key with IDEA in cbc mode
-seed
 
encrypt PEM output with cbc seed
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
encrypt PEM output with cbc camellia
-out file output the key to file
-passout arg output file pass phrase source
-f4 use F4 (0x10001) for the E value
-3 use 3 for the E value
-engine e use engine e, possibly a hardware device.
-rand file:file:...
load the file (or the files in the directory) into
the random number generator

创建私钥

创建私钥 duchaoqun.key(可以叫id_rsa、个人私钥,如果需要自签也就是CA私钥【假装自己是CA】,后缀可能又很多种)

 openssl genrsa -aes256 -out duchaoqun.key 2048
 
Generating RSA private key, 2048 bit long modulus
.................................................................................................................................................+++
........................................+++
e is 65537 (0x10001)
Enter pass phrase for duchaoqun:
Verifying - Enter pass phrase for duchaoqun:
# 实际的内容就是私钥:
# -----BEGIN RSA PRIVATE KEY-----
# -----END RSA PRIVATE KEY-----
 

根据私钥导出公钥

 openssl rsa -in duchaoqun.key -pubout -out duchaoqun.key.pem
Enter pass phrase for duchaoqun.key:
writing RSA key
 
# 文件内容
# -----BEGIN PUBLIC KEY-----
# -----END PUBLIC KEY-----
 

创建证书签发申请文件

根据上面生成私钥创建证书签发申请文件Cerificate Signing Request,csr是公钥证书原始文件,包含服务器信息和您的单位信息,得到证书签发申请文件后,我们可以将其发生给CA机构签发,当然我们也可以自行签发根证书。

openssl req -new -key duchaoqun.key -out duchaoqun.cn.csr
Country Name (2 letter code) []:CN
State or Province Name (full name) []:JiLin
Locality Name (eg, city) []:ChangChun
Organization Name (eg, company) []:DuChaoQun
Organizational Unit Name (eg, section) []:IT
Common Name (eg, fully qualified host name) []:www.duchaoqun.cn
Email Address []:[email protected]
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: your_password
 
# 填写上面基础信息,生成的文件内容如下
# -----BEGIN CERTIFICATE REQUEST-----
# -----END CERTIFICATE REQUEST-----
 

签发数字证书

签发数字证书(自签证书) duchaoqun.cn.cer (签X.509格式证书)

openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey duchaoqun.key -in duchaoqun.cn.csr -out duchaoqun.cn.cer

Signature ok
subject=/C=CN/ST=JiLin/L=ChangChun/O=DuChaoQun/OU=IT/CN=www.duchaoqun.cn/[email protected]
Getting Private key
Enter pass phrase for duchaoqun.key: your_password

# 文件内容
# -----BEGIN CERTIFICATE-----
# -----END CERTIFICATE-----

转换证书格式

# 将证书转换成 Java 使用的格式(PKCS12),需要私钥(duchaoqun.key)和数字证书(duchaoqun.cn.cer)文件,生成.p12后缀的文件。
 
**注意:p12格式文件是一个密钥库,包含私钥和证书,需要一个访问密码,一般用在Java家族的容器上**
**注意:pfx格式文件跟p12是一样的,只是后缀不同**
 
openssl pkcs12 -export -cacerts -inkey duchaoqun.key -in duchaoqun.cn.cer -out duchaoqun.cn.p12
 
Enter pass phrase for duchaoqun.key: your_key_password
Enter Export Password: your_password
Verifying - Enter Export Password: your_password
 
# 查看刚刚生成的duchaoqun.cn.p12密钥库信息
 
keytool -list -keystore duchaoqun.cn.p12 -storetype pkcs12 -v -storepass your_password
 

总结

-rw-r--r--   1 dcq  staff   1.3K  1 12 09:31 duchaoqun.cn.cer # 自签证书文件
-rw-r--r--   1 dcq  staff   1.1K  1 12 09:15 duchaoqun.cn.csr # 证书申请文件
-rw-r--r--   1 dcq  staff   2.5K  1 12 09:35 duchaoqun.cn.p12 # JAVA系证书库
-rw-r--r--   1 dcq  staff   1.7K  1 12 08:54 duchaoqun.key # 私钥文件
-rw-r--r--   1 dcq  staff   451B  1 12 09:38 duchaoqun.key.pem # 公钥文件
 

关于jks格式的证书库

Java常用的一种密钥库,Java Key Store,可以同时容纳多个公钥或私钥,后缀更是千奇百怪。可以用jdk\bin下的 keytool 工具进行相关操作。keytool -v -list -keystore https_keystore.jks

注意:jre 中的默认证书库(jre/lib/security/cacerts)的秘密是changeit

# 导入证书
keytool -import -alias CFCA_EV_ROOT -file /opt/jdk1.8.0_162/jre/CFCA_EV_ROOT.cer -keystore cacerts
 
# 删除证书
keytool -delete -alias some_name -keystore cacerts

SSL数字证书类型

目前有三种类型的证书:DV、OV、EV

DV和OV型证书最大的差别是:DV型证书不包含企业名称信息,而OV型证书包含企业名称信息。

OV型和EV型证书,都包含了企业名称等信息,但EV证书因为其采用了更加严格的认证标准,浏览器对EV证书更加“信任”,当浏览器访问到EV证书时,可以在地址栏显示出公司名称,并将地址栏变成绿色。

挑选数字证书

  • 如果仅需要通过在线加密实现数据安全、主要用于电子邮件、IM,CDN加速等,用户内部的OA,CRM,VPN系统。还是一个初创公司,业务刚刚起步。我们建议您可以先购买DV型证书,提高网站安全性和PR值。

  • 如果面向公众提供服务,有用户账户登录,在线应用等,有多个应用需求,多个域名需要部署,公司已经拥有一定的规模,我们建议您购买OV型证书,方便用户快速识别网站真实性,实现全网SSL。

  • 如果需要实现在线交易,在线支付功能有高价值的数据保密需求,需要防止可能遇到的钓鱼网站攻击属于大型企业或者金融机构,我们建议您购买EV型证书,提供最高安全性。

Mac 系统导入

在调试代码的时候需要本机Chrome访问,默认情况自签证书是不被信任的,这里导入到“钥匙串访问”,然后设置简介中的属性,设置为“总是信任”。