证书是用来对身份进行验证的机制,是一种数字签名形式的文件,包含证书拥有者的公钥及第三方的证书信息。证书分为两类:自签名证书和CA签发的证书。自签名证书不能有效地用来进行身份认证,但是在企业内网,可以满足一定的适用场景。如果一个server端使用自签名证书,client端要么被设置为无条件信任该证书,将自签名证书的公钥加入受信任列表。
CA签发证书的身份认证基本原理是首先验证方需要信任CA提供方自己的证书(CA、Cert),比如证书在操作系统的受信任证书列表中,或者用户通过“安装根证书”等方式将 CA的公钥加入受信任列表;然后CA对被验证方的原始证书进行签名(私钥加密),生成最终的证书;验证方得到最终的证书后,利用CAcert中包含的公钥进行解密,得到被验证方的原始证书。根据RSA的加密原理,如果用CA的公钥解密成功,说明该证书的确是用CA的私钥加密的,可以认为被验证方是可信的。

接下来讲解一下申请CA签名证书的步骤,以KeyTool 为例。

1) 要获取证书,首先需要创建密钥库和密钥对(公钥和关联的私钥)。 使用Java的keytool来生成密钥对和密钥库

keytool -genkeypair -keyalg RSA -alias casigned -keystore c:\CACerts\Verisign\versign.jks -storepass password -keysize 2048 -validity 365
What is your first and last name?
What is the name of your organizational unit?
What is the name of your organization?
Unknown: Training Software
What is the name of your City or Locality?
Unknown: San Mateo
What is the name of your State or Province?
What is the two-letter country code for this unit?
Unknown: USIs CN=mqureshi-lt.composite.com, OU=Training, O=this is a test, L=San Mateo, ST=California, C=US correct? [no]: yesEnter key password for (RETURN if same as keystore password):

-alias casigned 的证书别名,别名为casigned
-storepass密码为密钥库文件verisign.jks创建密码密码。 在keytool会话期间按提示符的Enter键密码,使用与-storepass标志为密钥库文件配置的相同密码;
First and last name: 不是指用户的名字和姓氏。 它是指安装证书的主机名;
此过程创建了自签名证书。 下一步是从证书颁发机构(VeriSign)请求证书,并将密钥库中的自签名证书替换为CA提供的证书;

2)创建证书签名请求
生成证书签名请求的命令, 在verisignReq.csr文件中生成证书签名请求。 使用文本编辑器打开此文件并复制内容。 将内容粘贴到VeriSign网站上的表格中,请求提供CSR;

keytool -certreq -alias
casigned -keyalg RSA -file c:\CACerts\Verisign\verisignReq.csr -keystore
c:\CACerts\Verisign\versign.jks

3)访问此VeriSign URL以申请30天免费试用证书
https:// ssl-certificate-center.verisign.com/process/retail/trial_initial?application_locale=VRSN_US&tid=s ymc_vrsn_ssl_try
在注册结束时,系统会提示输入证书签名请求的文本,如下所示:

VeriSign以纯文本形式发送包含您的证书的电子邮件。 将该证书复制到文件中并将其另存为verisign- .cer。 我们还使用了试用版的根证书和中间证书 (root and intermediate certificates)。 在实际的生产环境中,将拥有不同的根证书和中间证书;

4)Symantec发送的电子邮件包含指向试用根CA证书和试用SSL中间CA证书的链接。按照指向提供这些证书文本的网页的链接。将试用根证书的文本剪切并粘贴到文件verisignTrialRoot.cer中。确保消除证书文本开头和结尾的任何前面的和尾随空格以及任何空行。将试用中间证书的文本剪切并粘贴到文件verisignTrialIntermediate.cer中。确保消除证书文本开头和结尾的任何前面的和尾随空格以及任何空行。将试用根证书和中间证书导入密钥库,如以下keytool会话中所示,-trustcacerts将证书作为可信证书添加到密钥库。它被称为可信证书,因为密钥库所有者信任证书中的公钥属于证书的主体(所有者)的身份。证书的颁发者通过签署证书来证明这一点。

keytool -import -trustcacerts
-alias root -keystore C:\CACerts\Verisign\verisign.jks -file
C:\CACerts\Verisign\verisignTrialRoot.cer
Enter keystore password:
Owner: CN=VeriSign Trial Secure Server Root CA – G2, OU=”For Test Purposes Only.
No assurances.”, O=”VeriSign, Inc.”, C=US
Issuer: CN=VeriSign Trial Secure Server Root CA – G2, OU=”For Test Purposes Only.
No assurances.”, O=”VeriSign, Inc.”, C=US
Serial number: 168164a428ca12dfab12f19fb1b93554
Valid from: Tue Mar 31 17:00:00 PDT 2009 until: Sat Mar 31 16:59:59 PDT 2029
Certificate fingerprints:
MD5: E0:19:F5:FC:C0:9A:13:0E:38:B7:BF:0D:02:40:D3:C2
SHA1: 51:51:B8:63:8A:4C:1F:15:54:56:ED:37:C9:10:35:CA:D3:01:B9:36 Signature algorithm name: SHA1withRSA Version: 3Extensions:#1: ObjectId: 2.5.29.15 Criticality=trueKeyUsage [ Key_CertSignCrl_Sign ]

2: ObjectId: 2.5.29.19 Criticality=true

BasicConstraints:[
CA:true
PathLen:2147483647
]
0010: 8C 8C 7F 65
]
]

4: ObjectId: 1.3.6.1.5.5.7.1.12 Criticality=false

Trust this certificate? [no]: yes
Certificate was added to keystore

keytool -import -trustcacerts
-alias intermediate -keystore C:\CACerts\Verisign\verisign.jks -file
C:\CACerts\Verisign\verisignTrialIntermediate.cer
Enter keystore password:
Certificate was added to keystore

5) 现在导入最初在VeriSign的电子邮件回复中提供的证书,然后将其复制到文件verisign.cer中,如下面的keytool所示。 注意,别名与我们在步骤1中使用的别名相同。这是因为我们将使用CA签名的证书替换在步骤1中生成的自签名证书;

keytool -import -alias
casigned -trustcacerts -keystore c:\CACerts\Verisign\versign.jks -file
c:\CACerts\Verisign\verisign-mqureshi.cer
Enter keystore password:
Certificate reply was installed in keystore

导入证书或根证书或中间证书时的一个常见错误是输入而不是X.509证书。 此错误的最常见原因是粘贴的证书文本在证书文件中的格式不正确。 确保证书文本的任何行中没有额外的前导或尾随空格,并且内容已完全复制和粘贴。 还要确保证书的粘贴内容的开头或结尾没有空行。

6) 如果需要在别的应用中用到改CA签名的证书,就可以将该证书导出来,并且导入到应用的对应的信任证书库中;

keytool -export -alias
casigned -keystore c:\CACerts\Verisign\verisign.jks -file
c:\CACerts\Verisign\installedCert.cer
Enter keystore password:
Certificate stored in file

keytool -import -alias
casigned -keystore C:\CACerts\Verisign\verisign_truststore.jks -trustcacerts -file
C:\CACerts\Verisign\installedCert.cer
Enter keystore password:
Re-enter new password:
Owner: CN=kobrien-lt, OU=Terms of use at www.verisign.com/cps/testca (c)05,
OU=training, O=composite, L=san mateo, ST=california, C=
us
Issuer: CN=VeriSign Trial Secure Server CA – G2, OU=Terms of use at
https://www.verisign.com/cps/testca (c)09, OU=”For Test Purposes
Only. No assurances.”, O=”VeriSign, Inc.”, C=US
Serial number: 123f568cbd5e2de32b74019a94a2069d
Valid from: Wed Jun 27 17:00:00 PDT 2012 until: Sat Jul 28 16:59:59 PDT 2012
Certificate fingerprints:
MD5: C0:CC:A8:92:01:AE:39:2B:2C:13:12:6F:DF:76:44:82
应用中就会显示CA签名的证书,如下应用截屏所示:



关注微信服务号,手机看文章
关注微信服务号,手机看文章