ca 服务器的搭建 和证书的申请与颁发

CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权,那么有一个疑问,谁给CA来颁发证书呢,嘿嘿,当然是它自己给自己颁发了。

openssl是一款开源的加密工具,在Linux环境下,我们能够利用它来搭建一个CA来实现证书的发放,可以用于企业内部使用的加密工具。 

加密机制:

   明文加密:      telnet    ftp   pop3  密码不可靠 ;sendmail   NFS  NIS    信息数据的不可靠; rsh   rcp    验证的不可靠

 

实现安全的机制:
  1、随机数字生成器(Random Number Generater) /dev/random   系统初始化生成 软设备: 生成随机数的字符设备   / dev/urandom--> entropy pool 熵池中生成随机数,熵池为空时 采用伪随机数机制 不安全 一般采用random
   cat /dev/random
  2、单项加密
  •    单项加密:提取数据特征码 并不会对数据加密
  •    特征:    任意输入,定长输出
  •    雪崩效应:有一点小的改变就引起巨大的变化
  •    数据不可逆转

 常见的算法:

   md2  md5   mdc2  rmd160   sha  sha1 ---> md5 sha1

 3、对称加密: DES  3DES  AES  Twofish  RC6

 4、非对称加密:公钥加密 基于单向函数功能实现,密钥成对出现

 

  加密组件: openssl  gpg(文件加密)

 

  openssl rand 67 对67生成随机数

 

  openssl rand -base64 67 将二进制转成

 

  数字签名:发送方用私钥加密数据后发给接受方,接受方有对方的公钥解密

  CA:证书颁发机构 公信力的第三方

 

  通过一个例子来深刻认识加密是如何实现的 发送方给接受方发信,每种颜色对应一个步骤啦。    

 

其具体步骤流程为:

 

发送方:

  • 1、发送方用单向加密算法计算数据的特征码;
  • 2、发送方用自己的私钥加密这段特征码,并附加在数据尾部;
  • 3、发送生成一个对称密钥
  • 4、用此对称密钥加密数据和加密后特征码;
  • 5、发送方用接收方的公钥加密这个对称密钥,附加在密文的尾部,并发送之;

接收方:

  • 1、用自己的私钥解密加密过的对称密码;
  • 2、用密码解密密文;
  • 3、对发送方的公钥解密发送方私钥加密的特征码;
  • 4、用同样的单向加密算法计算出原始数据的特征码
  • 5、比较两段特征码;

下面用redhat 开源的openssl来搭建一个CA,并实现证书的颁发

##linux下的ssl是由openssl提供的

  
  
  
  
  1. [root@server1 tls]#vim openssl.cnf #ca的配置文档 
  2. [ CA_default ] 
  3. dir = /etc/pki/CA      #CA存放的路径 
  4. certs = $dir/certs     #存放签名的公钥 
  5. crl_dir = $dir/crl     # 证书过期列表,存放过期证书 
  6. database = $dir/index.txt   # 证书颁发、吊销的信息 
  7. new_certs_dir = $dir/newcerts  # 证书副本(吊销凭证) 
  8. certificate = $dir/cacert.pem  #CA公钥(任何人都可以拥有的) 
  9. serial = $dir/serial # 序列号(每作一次签名,序列号就增加1) 
  10. crlnumber = $dir/crlnumber #吊销序列号 
  11. crl = $dir/my-ca.crl #吊销证书名单列表 
  12. private_key = $dir/private/cakey.pem    # 私钥 与产生自己私钥的名字对应 
  13. RANDFILE = $dir/private/.rand # private random number file 
  14. x509_extensions = usr_cert # The extentions to add to the cert 
  15. default_days = 365  # 证书有效期 
  16. default_crl_days30  #crl更新时间 
  17. [ policy_match ] 
  18. countryName = match #国家代码必须完全匹配可以修改为optional 
  19. stateOrProvinceName = match # 
  20. organizationName = match 
  21. organizationalUnitName = optional #optional可以不一样 
  22. commonName = supplied #代表唯一身份,必须不匹配 
  23. emailAddress = optional 
  24. [ req_distinguished_name ] 
  25. countryName = Country Name (2 letter code) 
  26. countryName_default = CN #国家代码 
  27. countryName_min = 2 
  28. countryName_max = 2 
  29. stateOrProvinceName = State or Province Name (full name) 
  30. stateOrProvinceName_default =henan 
  31. localityName = Locality Name (eg, city) 
  32. localityName_default = zhengzhou #城市 
  33. 0.organizationName = Organization Name (eg, company) 
  34. 0.organizationName_default = Example, Inc. #组织 

##openssl.cnf配置完成

 

  
  
  
  
  1. [root@server1 tls]# cd ../CA/ 
  2. [root@server1 CA]# ls 
  3. private 
  4. [root@server1 CA]# mkdir {certs,newcerts,crl} #创建刚才定义的那几个目录 
  5. [root@server1 CA]# ls 
  6. certs crl newcerts private 
  7.  

  
  
  
  
  1. [root@server1 CA]# echo 01 > serial ;touch index.txt #分配一个开始序列号并创建index.txt 

开始生成CA中心自己的私钥

 

  
  
  
  
  1. [root@server1 CA]#(umask 077; openssl genrsa –out private/cakey.pem 2048 ) 
  2. Generating RSA private key, 2048 bit long modulus 
  3. ..................+++ 
  4. .........................................................................................................................................+++ 
  5. e is 65537 (0x10001) 
  6. Enter pass phrase for private/cakey.pem:redhat #输入私钥密码 
  7. Verifying - Enter pass phrase for private/cakey.pem:redhat #确认输入 

通过私钥来生成公钥:

  
  
  
  
  1. [root@server1 CA]# openssl req -new -x509 -key private/cakey.pem -days 365 -out cacert.pem 
  2. Enter pass phrase for private/cakey.pem: 
  3. You are about to be asked to enter information that will be incorporated 
  4. into your certificate request. 
  5. What you are about to enter is what is called a Distinguished Name or a DN. 
  6. There are quite a few fields but you can leave some blank 
  7. For some fields there will be a default value, 
  8. If you enter '.', the field will be left blank. 
  9. ----- 
  10. Country Name (2 letter code) [CN]: 
  11. State or Province Name (full name) [henan]: 
  12. Locality Name (eg, city) [zhengzhou]: 
  13. Organization Name (eg, company) [Example, Inc.]: 
  14. Organizational Unit Name (eg, section) []: 
  15. Common Name (eg, your name or your server's hostname) []:server1.example.com 
  16. Email Address []: 

CA中心已经搭完了,此时就可以作为一个被信任的机构来为其他颁发证书了

给httpd服务颁发证书

 1、新建并进入工作目录

  
  
  
  
  1. [root@server1 ~]#     cd /etc/httpd 
  2. [root@server1 httpd]#  mkdir certs  #存放证书信息 
  3. [root@server1 certs]# cd certs 

 2、模拟客户机生成密钥

  
  
  
  
  1. [root@server1 certs]# openssl genrsa 1024 > httpd.key  
  2. [root@server1 certs]# chmod 400 httpd.key  
 3、生成并向CA提交申请

 

  1. [root@server1 certs]# openssl req -new -key httpd.key -out httpd.csr #后缀名
填写的信息要与CA保持一致
  4、将CA申请提交给CA服务器
  
  
  
  
  1. # scp httpd.csr 192.168.0.1:/tmp 

5、在服务器端192.168.0.21签署证书
  
  
  
  
  1. # cd /tmp 
  2. # openssl ca -in httpd.csr -out  /etc/pki/CA/certs/httpd.crt 
 证书生成以后就可以直接发给客户端了 此时证书颁发完毕,

证书申请和颁发没有留有图片。有什么疑问可以直接留言,相互促进,相互学习!!!

你可能感兴趣的:(OpenSSL,证书颁发,CA服务器)