首页 > 代码库 > 申请证书和自建CA

申请证书和自建CA

一、理论知识

什么是CA?

CA是Certificate Authority的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书。这个数字证书包含了用户身份的部分信息及用户所持有的公钥,同时利用CA本身的私钥为数字证书加上数字签名,其他用户只要能验证证书是真实的,并且信任颁发证书的认证中心,就可以确认用户身份,完成认证工作。
¤CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户名称与证书中列出的公开密钥相对应。CA中心的数字签名使得攻击者不能伪造和篡改数字证书。
为什么要使用CA?

¤为了使PKI的业务能够广泛应用,一个基本而关键的问题是公钥的分发与管理。由此引发出了某一公钥究竟属于谁的问题,它必须是由一个公众都信赖的权威机构进行认证,否则整个业务体系都将出现致命的安全漏洞。目前国际上通用的解决办法就是建立证书签证机关(Certificate Authority,即CA),由CA对公钥进行统一的管理并将公钥以公钥证书的形式对外分发。
CA的功能?

¤参考TongCA的功能
1、生成、撤销、更新证书。
2、发行证书和黑名单到目录服务器。
3、维护证书和黑名单数据库。
4、生成和维护自己的密钥:为了安全起见,CA目前的密钥(?)是CA自己生成的,并加密保存到具有超级用户权限的目录中。
5、维护审计日志。
6、增加、删除本级RA:由CA操作员来完成。
7、保证CA、RA和目录服务器三者数据内容的一致性。

概括地说,认证中心(CA)的功能有:证书发放、证书更新、证书撤销和证书验证。CA的核心功能就是发放和管理数字证书,具体描述如下:

(1)接收验证最终用户数字证书的申请。

(2)确定是否接受最终用户数字证书的申请-证书的审批。

(3)向申请者颁发、拒绝颁发数字证书-证书的发放。

(4)接收、处理最终用户的数字证书更新请求-证书的更新。

(5)接收最终用户数字证书的查询、撤销。

(6)产生和发布证书废止列表(CRL)。

(7)数字证书的归档。

(8)密钥归档。

(9)历史数据归档。

认证中心为了实现其功能,主要由以下三部分组成:

注册服务器:通过 Web Server 建立的站点,可为客户提供每日24小时的服务。因此客户可在自己方便的时候在网上提出证书申请和填写相应的证书申请表,免去了排队等候等烦恼。

证书申请受理和审核机构:负责证书的申请和审核。它的主要功能是接受客户证书申请并进行审核。

认证中心服务器:是数字证书生成、发放的运行实体,同时提供发放证书的管理、证书废止列表(CRL)的生成和处理等服务。
目前CA认证系统都由哪几部分组成?各部分都具有什么功能?

目前CA认证系统主要由以下三部分组成:在客户端面向证书用户的数字证书申请、查询和下载系统;在RA端由RA管理员对证书申请进行审批的证书授权系统;在CA控制台,签发用户证书的证书签发系统。

二、申请CA证书

1.生成一个私钥;

 

[root@localhost ~]# clear
[root@localhost ~]# (umask 077;openssl genrsa -out ./key.pri 2048)
Generating RSA private key, 2048 bit long modulus
...................+++
.........................................................+++
e is 65537 (0x10001)

2.制作一个证书签署请求;

[root@localhost ~]# openssl req -new -key ./key.pri -out ./myreq.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) []:Guangzhou
Locality Name (eg, city) [Default City]:Shenzhen
Organization Name (eg, company) [Default Company Ltd]:www.magine356wj.com
Organizational Unit Name (eg, section) []:section
Email Address []:magine356wj@126.com

Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:redhat
An optional company name []:redhat

注:Organization Name (eg, company) [Default Company Ltd]:如果证书是对http使用的,这里就要填FQDN

 

3.由CA签署证书

这一步提交书面申请,在这里略过

 

自建CA:

[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# (umask 077;openssl gensa -out private/cakey.pem 2048)
[root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
......+++
..................+++
e is 65537 (0x10001)
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out c
certs/ crl/   
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
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) []:Guangzhou
Locality Name (eg, city) [Default City]:Shenzhen
Organization Name (eg, company) [Default Company Ltd]:magine356wj.CA   
Organizational Unit Name (eg, section) []:section
Common Name (eg, your name or your server‘s hostname) []:CA
Email Address []:magine356wj@126.com
[root@localhost CA]# ls -lh
total 20K
-rw-r--r--. 1 root root 1.5K Jul 13 12:40 cacert.pem
drwxr-xr-x. 2 root root 4.0K Feb 21  2013 certs
drwxr-xr-x. 2 root root 4.0K Feb 21  2013 crl
drwxr-xr-x. 2 root root 4.0K Feb 21  2013 newcerts
drwx------. 2 root root 4.0K Jul 13 12:36 private
[root@localhost CA]# touch serial index.txt
[root@localhost CA]# echo 01 >serial 
[root@localhost CA]# vim serial
[root@localhost CA]# openssl ca -in myreq.csr -out mycert.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
myreq.csr: No such file or directory
140178715932488:error:02001002:system library:fopen:No such file or directory:bss_file.c:355:fopen(‘myreq.csr‘,‘r‘)
140178715932488:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:357:
[root@localhost CA]# cat serial 
01

注:

签署证书:

#openssl ca in /path/to/certreq.csr –out /path/to/certifile.crt –days 365

 

令,/etc/pki/openssl.conf中可以修改默认配置

 

专用客户端测试工具:

#openssl s_client –connect HOST:PORT –CAfile /path/to/cacertfile | –CApath /path/to/cacertfile-dir/ –ssl2|-ssl3|-tls

 

 

 

小结:

openssl

加密,解密:enc

信息摘要:dgst

生成私钥,提取公钥:genrsa

制作证书签署请求,自建CA:req

签署证书:ca