用openssl实现自建CA证书服务器

编程入门 行业动态 更新时间:2024-10-10 01:20:21

用openssl实现自建CA<a href=https://www.elefans.com/category/jswz/34/1770960.html style=证书服务器"/>

用openssl实现自建CA证书服务器

早期在网络上传输的数据都是明文的,像http,ftp,telnet等协议,这样非常的不安全,只需要简单的抓包分析一下,你的账号和口令就一览无余。所以脑细胞发达的大神们自然不能坐视不管,于是乎各种加密算法就此诞生了。其实加密的历史非常久远了,很久很久以前,江湖人士为了防止隔墙有耳就发明了“行话”或者称之为“暗语”,这样即使咱们听到他们说什么,却也不知道人家在说什么,这对于我们来说就是密文,只有内部知情人士知晓密码懂得解密方法才能听懂。哈哈,所以要说加密恐怕咱们中华上下五千的文明才是鼻祖。加密应用于各个领域,在这个信息化的时代,加密尤显重要,得信息者得天下。

    简单说下加密方式:

   1、对称加密,加密与解密过程是可逆的,流行的算法主要有DES(Data Encryption Standard,早期由IBM公司研发),3DES, AES(Advanced Encryption Standard)等;

   2、非对称加密,也叫密钥加密,通信的双方各自持有自己的私钥并且自己的私钥只有自己有 ,然后对外公开自己的公钥,用自己的公钥加密的数据则只有自己的私钥可以解密,这样就可以保证数据的机密性;同理用自己的私钥加密也只能用自己的公钥加密,这样可以用来做身份验证,用来确认收到的数据确实是我们所期望的人发来的。常用的非对称加密算法有RSA, DSA等。但是非对称加密由于算法比较复杂,通常加密速度要比对称加密慢3个数量级1000倍,差距还是非常大的,所以通常两种结合起来使用比较多,例如可以用非对称加密用户账号口令或对称加密的密钥,之后的数据传输则用对称加密,由于这个密钥是非对称加密传输的,很难被获取到,所以这个数据传输就相对要安全的很,而且传输的过程中还可以定期更换密钥,这样即使密钥被破解出来,对方也会发现是徒劳无功的。

   3、单向加密, 这个应用的也非常广泛,最常见的要数我们平常从站点下载各种ISO镜像文件了,官方都会提供光盘的镜像文件的MD5或SHA值供我们校验文件有没有被别人篡改过。这个值也称之为数据的指纹,单向加密对所有的数据加密后结果都是一个定长的字串输出,而且原文只要有一点的变化,输出的结果就会发生很大的变化,面目全非,这称为单向加密的雪崩效应。常用的单向加密算法有MD5,SHA等。

    那么数字证书又是什么呢?举个例子来说,我们知道银行等金融类的等等涉及到交易的都是加密数据传输的,以保证交易的安全。比如你要登陆工商银行的网银,打开网银登陆页面后你就会看见地址栏http变成了https,而且有了一个锁头的标志,点开锁头就能够看到工行的证书信息,如下图所示,我们可以看到是由VeriSign这个证书颁发机构把证书发给了mybank.icbc这个站点,而像VeriSign这类的全球知名的证书颁发机构CA证书我们系统一般都会事先安装好了的,这样我们就首先先认可了VeriSign这个CA证书颁发机构,然后我们继而信任由这个机构颁发给工商银行的证书(因为CA颁发给工行的证书上有用CA自己私钥加密的数字签名,而我们本地已经有的CA证书含有CA的公钥如果能解密就可以确定确实是此CA颁发的),由此来确认我们访问的网站确实为真实的工商银行网站而不是一个冒牌的钓鱼网站。我们首次登陆网站时系统会提示我们安装工行的证书,安装完证书后我们即可以获得工行网站的公钥,之后我们的所有数据就都是加密传输的了(浏览器发给服务器的数据用工行的公钥加密,工行网银用自己的私钥解密;服务器返回给浏览器的数据用自己的私钥加密,浏览器则用服务器的公钥解密)。

 

 

数字证书一般包含以下内容:

协议(一般常见的x509, 其中包含协议的版本号以及这个证书的一个序列号,这个序列号在CA中的唯一存在的)

签名算法标志

发行者名称

有效期

证书主体名称

证书主体公钥信息

发行商唯一的标识

证书主体唯一标识

证书授权中心的数字签名

扩展信息等

数字证书由申请者向证书颁发机构申请,通过审核后颁发,通常遵循PKI (Public Key Infranstructure)标准,一个标准的PKI通常包含:

端实体(即申请者)

注册机构 RC

签证机构 CA

证书撤消列表发布机构 CRL(Certificate Revoke List)

证书存取库

    可是通过著名的CA机构签发证书费用一般都是比较高的,如果我们只是内部使用而我们又可以自己确定信任我们自己的主机的,这样就比较不经济,所以这种场景下我们就可以通过Openssl提供的功能自建一个内部使用的CA服务器。

openssl 的配置文件为 /etc/pki/tls/opensslf, 下面这段是CA的配置项

  [  CA_default  ]  dir  =   / etc / pki / CA #  Where  everything  is  kept certs  =  $dir / certs #  Where  the issued certs are kept crl_dir  =  $dir / crl #  Where  the issued crl are kept  database   =  $dir / index .txt #  database   index   file . #unique_subject  =  no #  Set   to   ' no '   to  allow creation  of  # several ctificates  with  same subject. new_certs_dir  =  $dir / newcerts #  default  place  for  new certs. certificate  =  $dir / cacert.pem # The CA certificate serial  =  $dir / serial # The  current  serial  number  crlnumber  =  $dir / crlnumber # the  current  crl  number  # must be commented out  to  leave a V1 CRL crl  =  $dir / crl.pem # The  current  CRL private_key  =  $dir / private / cakey.pem# The private  key  RANDFILE  =  $dir / private / . rand  # private random  number   file  x509_extensions  =  usr_cert # The extentions  to   add   to  the cert   

要创建CA服务器就要首先为CA自己颁发一个证书, 就要首先为CA自己生成私钥, 步骤如下

1> 生成CA私钥, umask 077保证私钥除属主外其他人没有任何权限

  [root@localhost CA] #  cd /etc/pki/CA/   [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] #  ls private/   cakey.pem   

2> 为CA自签证书, 并创建index.txt 和 serial 文件, 至此其实CA创建就已经完成了,下面就可以接受请求为其他主机颁发证书了.

  [root@localhost CA] #  ls private/   cakey.pem [root@localhost CA] #  openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650   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) []:SHA Locality Name (eg, city) [Default City]:SHA Organization Name (eg, company) [Default Company Ltd]:BOB LINUX Organizational Unit Name (eg, section) []:TECH Common Name (eg, your name  or  your server ' s hostname) []:BOB.ORG   Email Address []:ADMIN@BOB.ORG [root@localhost CA] #  touch index.txt   [root@localhost CA] #  echo 01 > serial   

3> 生成证书申请

  [root@localhost  ~ ] #  (umask 077;openssl genrsa -out www.pri 2048)   Generating RSA private key,  2048  bit long modulus ..... +++  ................................................................................................................................................... +++  e  is   65537  ( 0x10001 ) [root@localhost  ~ ] #  openssl req -new -key www.pri -out www.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) [CN]: State  or  Province Name (full name) []:SHA Locality Name (eg, city) [Default City]:PUDONG Organization Name (eg, company) [Default Company Ltd]:BOB LINUX Organizational Unit Name (eg, section) []:SYSTEM Common Name (eg, your name  or  your server ' s hostname) []:www.linux   Email Address []: Please enter the following  ' extra '  attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@localhost  ~ ] #       

4> 为新主机申请颁发证书,我们可以看到serial的序号已经自动加1变成02了,新颁发的证书在 newcerts目录下也有了

  [root@localhost  ~ ] #  openssl ca -in www.csr -out www.crt -days 3650   Using configuration  from   / etc / pki / tls / opensslf Check that the request matches the signature Signature ok Certificate Details: Serial Number:  1  ( 0x1 ) Validity Not Before: Mar  3   03 : 16 : 53   2014  GMT Not After : Feb  29   03 : 16 : 53   2024  GMT Subject: countryName  =  CN stateOrProvinceName  =  SHA organizationName  =  BOB LINUX organizationalUnitName  =  SYSTEM commonName  =  www.linux X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 6F:4B: 01 :ED: 07 : 00 :A6: 75 : 28 : 44 :D6:C1: 46 : 22 : 49 :9D: 29 :8B: 46 :A2 X509v3 Authority Key Identifier: keyid:D5:BA: 32 :A8:5B:5A:2F:E9:AF: 60 : 43 : 95 :AB:CD: 52 :F2: 89 :BE: 31 :CB Certificate  is  to be certified until Feb  29   03 : 16 : 53   2024  GMT ( 3650  days) Sign the certificate? [y / n]:y  1  out of  1  certificate requests certified, commit? [y / n]y Write out database with  1  new entries Data Base Updated [root@localhost  ~ ] #  cd /etc/pki/CA   [root@localhost CA] #  ls   cacert.pem crl index.txt.attr newcerts requests serial.old certs index.txt index.txt.old private serial [root@localhost CA] #  cat serial   02  [root@localhost CA] #  cat index.txt   V 240229031653Z  01  unknown  / C = CN / ST = SHA / O = BOB LINUX / OU = SYSTEM / CN = www.linux [root@localhost CA] #  ls newcerts/   01 .pem   

注意: 此方法创建CA时, 证书申请的国家,省份及组织名必须与CA的信息保持一致.

完成此过程的脚本:

  # !/bin/bash  #  To create a self-authorized CA server    dir =/ etc / pki / CA database = $dir / index.txt certificate = $dir / cacert.pem serial = $dir / serial private_key = $dir / private / cakey.pem echo  " Generating CA private key... "  (umask  077 ;openssl genrsa  - out $private_key  2048   &>   / dev / null) echo  " Issue certificate for CA self... "  read  - p  " pls provide your suggestion for the cert expiry days:  "  days openssl req  - new  - x509  - key $private_key  - out $certificate  - days $days echo  01   >  $serial touch $database echo  " CA created "    
 

转载于:

更多推荐

用openssl实现自建CA证书服务器

本文发布于:2024-02-13 20:26:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760334.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:证书   服务器   openssl   CA

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!