CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权,那么有一个疑问,谁给CA来颁发证书呢,嘿嘿,当然是它自己给自己颁发了。
openssl是一款开源的加密工具,在Linux环境下,我们能够利用它来搭建一个CA来实现证书的发放,可以用于企业内部使用的加密工具。
加密机制:明文加密: telnet ftp pop3 密码不可靠 ;sendmail NFS NIS 信息数据的不可靠; rsh rcp 验证的不可靠
常见的算法:
md2 md5 mdc2 rmd160 sha sha1 ---> md5 sha1
3、对称加密: DES 3DES AES Twofish RC6
4、非对称加密:公钥加密 基于单向函数功能实现,密钥成对出现
CA:证书颁发机构 公信力的第三方
其具体步骤流程为:
发送方:
接收方:
下面用redhat 开源的openssl来搭建一个CA,并实现证书的颁发
##linux下的ssl是由openssl提供的。
- [root@server1 tls]#vim openssl.cnf #ca的配置文档
- [ CA_default ]
- dir = /etc/pki/CA #CA存放的路径
- certs = $dir/certs #存放签名的公钥
- crl_dir = $dir/crl # 证书过期列表,存放过期证书
- database = $dir/index.txt # 证书颁发、吊销的信息
- new_certs_dir = $dir/newcerts # 证书副本(吊销凭证)
- certificate = $dir/cacert.pem #CA公钥(任何人都可以拥有的)
- serial = $dir/serial # 序列号(每作一次签名,序列号就增加1)
- crlnumber = $dir/crlnumber #吊销序列号
- crl = $dir/my-ca.crl #吊销证书名单列表
- private_key = $dir/private/cakey.pem # 私钥 与产生自己私钥的名字对应
- RANDFILE = $dir/private/.rand # private random number file
- x509_extensions = usr_cert # The extentions to add to the cert
- default_days = 365 # 证书有效期
- default_crl_days= 30 #crl更新时间
- [ policy_match ]
- countryName = match #国家代码必须完全匹配可以修改为optional
- stateOrProvinceName = match #
- organizationName = match
- organizationalUnitName = optional #optional可以不一样
- commonName = supplied #代表唯一身份,必须不匹配
- emailAddress = optional
- [ req_distinguished_name ]
- countryName = Country Name (2 letter code)
- countryName_default = CN #国家代码
- countryName_min = 2
- countryName_max = 2
- stateOrProvinceName = State or Province Name (full name)
- stateOrProvinceName_default =henan
- localityName = Locality Name (eg, city)
- localityName_default = zhengzhou #城市
- 0.organizationName = Organization Name (eg, company)
- 0.organizationName_default = Example, Inc. #组织
##openssl.cnf配置完成
- [root@server1 tls]# cd ../CA/
- [root@server1 CA]# ls
- private
- [root@server1 CA]# mkdir {certs,newcerts,crl} #创建刚才定义的那几个目录
- [root@server1 CA]# ls
- certs crl newcerts private
- [root@server1 CA]# echo 01 > serial ;touch index.txt #分配一个开始序列号并创建index.txt
开始生成CA中心自己的私钥
- [root@server1 CA]#(umask 077; openssl genrsa –out private/cakey.pem 2048 )
- Generating RSA private key, 2048 bit long modulus
- ..................+++
- .........................................................................................................................................+++
- e is 65537 (0x10001)
- Enter pass phrase for private/cakey.pem:redhat #输入私钥密码
- Verifying - Enter pass phrase for private/cakey.pem:redhat #确认输入
通过私钥来生成公钥:
- [root@server1 CA]# openssl req -new -x509 -key private/cakey.pem -days 365 -out cacert.pem
- Enter pass phrase for private/cakey.pem:
- 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) [CN]:
- State or Province Name (full name) [henan]:
- Locality Name (eg, city) [zhengzhou]:
- Organization Name (eg, company) [Example, Inc.]:
- Organizational Unit Name (eg, section) []:
- Common Name (eg, your name or your server's hostname) []:server1.example.com
- Email Address []:
CA中心已经搭完了,此时就可以作为一个被信任的机构来为其他颁发证书了
给httpd服务颁发证书
1、新建并进入工作目录
- [root@server1 ~]# cd /etc/httpd
- [root@server1 httpd]# mkdir certs #存放证书信息
- [root@server1 certs]# cd certs
2、模拟客户机生成密钥
- [root@server1 certs]# openssl genrsa 1024 > httpd.key
- [root@server1 certs]# chmod 400 httpd.key
3、生成并向CA提交申请
填写的信息要与CA保持一致
- [root@server1 certs]# openssl req -new -key httpd.key -out httpd.csr #后缀名
4、将CA申请提交给CA服务器
5、在服务器端192.168.0.21签署证书
- # scp httpd.csr 192.168.0.1:/tmp
证书生成以后就可以直接发给客户端了 此时证书颁发完毕,
- # cd /tmp
- # openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt
证书申请和颁发没有留有图片。有什么疑问可以直接留言,相互促进,相互学习!!!