首页 > 技术文章 > 使用openssl建立自签名证书及本地CA

bluevitality 2017-03-07 14:58 原文

创建CA根私钥及根证书:
  • 生成根私钥:openssl genrsa -des3 -out /etc/pki/CA/rootca.key 1024
  • 生成根证书:openssl req -new -x509 -key /etc/pki/CA/rootca.key -out /etc/pki/CA/rootca.crt -days 365   即CA的自签名证书!

  查看CA证书:openssl x509 -noout -text -in rootca.crt
  验证证书有效性:openssl verify -CAfile rootca.crt <rootca.crt / user.crt>

 

申请方用csr请求CA对子证书授权:
  • 生成用户自身私钥:openssl genrsa -des3 -out ~/Mysql-master.key 1024  
  • 生成用户自身证书:openssl req -new -key ~/Mysql-master.key -out ~/Mysql-master.csr  
  • 将CSR拷到CA进行签名:scp Susers.csr root@Openssl_CA_address:/ca/

 

在CA端对csr请求签名:
  • 准备:touch /etc/pki/CA/{index.txt,serial}
  • 创建证书序列号:echo "01" > /etc/pki/CA/serial     #首次必须添加序列号否则会报错
  • CA端对CSR进行签名:openssl ca -keyfile /etc/pki/CA/rootca.key -cert /etc/pki/CA/rootca.crt -in ./Mysql-master.csr -out ./Mysql-master.pem -days 365

 

在CA端吊销证书:

  • 获取徐吊销证书的序列号等信息: openssl x509 -in /root/cakey.crt -noout -serial -subject  #将此信息及相关的身份证明信息发送给CA服务管理员

  serial=01
  subject= /C=cn/ST=shandong/O=eway/OU=www/CN=

  • 首次吊销需在CA端执行:touch /etc/pki/CA/crlnumber ; echo "01" > /etc/pki/CA/crlnumber    #第一次吊销需创建文件,生成编号,在CA端进行
  • CA端执行吊销操作:openssl ca -revoke /etc/pki/CA/newcerts/01.pem
  • CA端更新证书吊销列表:openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl

 

vim ca.config   <--- Windows   使用配置文件对CSR授权:openssl ca -config ca.config -infiles Susers.csr -out Susers.crt -days 365
[ ca ]         
default_ca=CA_own         
[ CA_own ]         
dir=C:/openssl/bin         
certs=C:/openssl/bin                 
new_certs_dir=C:/openssl/bin            生成的证书位置 touch /etc/pki/CA/{ index.txit , serial , crlnumber }
database=C:/openssl/bin/index.txt       用于快速检索 touch index.txt 证书信息数据库文件
serial=C:/openssl/bin/serial.txt             每个证书的序列号 echo 000001 > /etc/pki/CA/serial 证书的序列号
crlnumber=C:/openssl/bin/crlnumber  吊销证书的序列号
crl=C:/openssl/bin/crl.pem            证书吊销列表文件
certificate=C:/openssl/bin/rootca.crt    CA自身的证书
private_key=C:/openssl/bin/rootca.key   
default_days=365          
default_crl_days=30         
default_md=md5         
preserve=no         
policy=policy_anything         
[ policy_anything ]         
countryName=CN 国家        
stateOrProvinceName=shanghai 省份        
localityName=shanghai 城市         
organizationName=baidu 公司        
organizationalUnitName=Tech 部门         
commonName=www.baidu.com 主机名称(需严格匹配)      
emailAddress=admin@163.com 邮箱
 

 

附:

  • 测算法速度: openssl speed <算法> 算法如: rsa/des
  • 生成随机数: openssl rand [ -base64 / -hex ] <length>
  • 生成公私钥: openssl genrsa -out private.key 2048 ; openssl rsa -in private.key -pubout -out public.pubkey
  • 文件加解密: openssl enc -e -des3 -in sec.key -out file.secrite ; openssl enc -d -des3 -in file.secrite -out sec.key.dec
  • 计算摘要值: openssl [md5/sha1] < file <---> echo -n "***" | [ md5sum / sh1sum ] <---> openssl dgst [-md5/sha1] < file

 

备忘:

 

网络安全4要素:
  • 机密性: 对称/非对称加密(非对称可防止"中间人"攻击和伪造)
  • 完整性: 摘要算法,如哈希函数的MD5(防篡改)常用发送方私钥加密摘要数据后发出
  • 身份验证: 数字签名/数字证书:与谁沟通以及是否有权沟通,是安全四要素前提条件!
  • 不可抵赖: 数字签名:是否本人发出和收到信息
 
非对称加密原理:
  • C把其把公匙放在S端,当C->S请求时S在家目录寻找C的公钥并用其加密质询给C,C收到质询后用私钥解密再发给S
  • 公私钥角色可互换,公钥在网络传输而私钥仅保存本地(双方使用对方公钥加密发出数据并使用自己的私钥解密收到数据)
  • 非对称加密加/解密时间长、速度慢,适合少量数据加密,一般用公钥加密对称算法的密钥后发出
 
公钥基础设施:
  • CA机构的公钥存储在浏览器中(PKI:公钥基础设施)。所有对象都认可CA机构的证书(及公钥)。CA机构是PKI的核心
  • PKI是树形结构,其间的信任关系是可 以传递的(CA下的每个子节点可再次创建其下的证书并授权)注:自身的公钥存储在自己的证书当中
 
SSL/TLS:
  • SSL安全套接字层: 在应用层与传输层间加入一层,将上层数据处理后交给下层
  • TLS传输层安全: 直接在TCP传输层实现(目前的主流)。
 
HTTPS:
  • 在TCP三次握手后即开始协商使用SSL会话还是TLS会话.........
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
1. c/s间建立TCP三次握手后,s端将自己从ca机构申请获得的crt文件(证书)传递给c端
2. c端使用s端证书中指定的CA机构的公钥解密(因只有与CA对应的公钥才可解密,此使用公钥解密的步骤即对CA机构的数字签名进行验证)
3. c端验证通过即有效,此时c从s提供的证书中提取出公钥的同时,使用此公钥加密一个对称密钥发送给s端
4. c/s端此后的流量均经由之前c端加密发送的对称密钥进行加解密(不使用公钥加解密是因为非对称加密算法执行效率低)
注:c端使用CA的公钥解密并通过即认可有效,此时会去CA机构查询CRL(证书吊销列表)中是否有此证书,若有则认为不可用!

 

推荐阅读