OpenSSL加密与证书

加密

  1. 身份的验证       (非对称加密)
  2. 数据的加密        (对称加密)
  3. 数据的完整性      (单向加密)

三者的联合使用会保证数据的安全机制

A:发送者  B:接收方

   A的操作:

  • A使用单向加密算法获得发送数据(文件)的特征码
  • A使用自己的私钥来加密数据(文件)的特征码
  • A使用对称加密来对数据进行加密,生成一个一次性会话密钥Session Key,
  • A使用B的公钥加密生成的Session Key
  • A发送整个加密后的文件

  B的操作:

  • B接收到A发送来的加密文件
  • B使用自己的私钥解密得到数据部分的Session Key
  • B使用Session Key解密加密的文件
  • B使用A的公钥确认A的身份
  • B使用单向加密对A发来的数据部分提取特征码
  • B使用A的公钥解密A加密的数据部分的特征码,
  • B比对两个特征码的异同

如果其中任何一步出现问题则B就认为该数据不安全

好了,数据可以安全发送了,但是A,B的公钥对方是怎么得到的呢?A,B怎么信任对方的公钥呢?

   这就需要用到证书了,证书的内容:1.公钥和证书有效期2.拥有者信息3.证书的用途4.CA的信息5.CA的签名信息

      签名的过程:使用自己的私钥加密其发送文件的特征码

   首先,大家得知道操作系统中已经固定的存有CA的证书,当你装好你的操作系统时。对于A,B而言,需要使用该证书来确定来给自己发证的CA的真实性,当A,B通信时也需要对方的证书,根据保存的CA的证书,A,B可以对对方证书的签名信息解密,得到对方公钥等信息的特征码,然后通过对公钥等信息的单向加密获得特征码,对比特征码可以得知对方的公钥的是否可靠。当然操作系统中有多个CA的证书,允许A,B双方的发证CA不是同一机构。

  下面我们来讨论证书的颁发过程

    首先我们需要有一个CA,然后我们才可以给别人发放证书。在RedHat中我们需要以下的做法:

    #vim /etc/pki/tls/openssl.cnf

    修改 dir             = ../../CA              # Where everything is kept

      为 dir             = /etc/pki/CA              # Where everything is kept

     保存后退出   

   #cd  /etc/pki/CA

   #touch index.tx

   #mkdir newcerts  certs  crl  

   建立一个自签的证书

   #openssl genrsa 1024 > ./private/cakey.pem

   #openssl req   -new  -X509 –key  ./private/cakey.pem  -out cacert.pem

好了,CA的证书做好了

   接下来我们用A来进行证书的请求

     生成A的私钥my.key

     #openssl genrsa –out my.key  1024           [可以提取my.key的公钥 openssl rsa –in  -my.key –pubout  -out pub_my.key]

     生成A的证书请求my.csr

     #openssl req –new  -k  my.key  -out  my.csr 

       弹出选项,用于完整的A的信息(国家,省份,城市,组织,部门,A的主机或服务器名称,邮件)  [更改默认的选项 vim /etc/pki/tls/openssl.cnf]

  A主机将自己的证书请求传给CA

    CA根据A的证书请求文件my.csr生成A的证书my.crt并签署

     # openssl ca –in   my.csr  -out  my.crt  -days  3660 

 

 

在RedHat中简单生成证书,密钥等

   cd  /etc/pki/tls/certs/

     make  a.key

     make  a.pem

     make   a.crt

依靠Makefile文件来实现的

UTF8 := $(shell locale -c LC_CTYPE -k | grep -q charmap.*UTF-8 && echo -utf8)
SERIAL=0

.PHONY: usage
.SUFFIXES: .key .csr .crt .pem
.PRECIOUS: %.key %.csr %.crt %.pem

usage:
    @echo "This makefile allows you to create:"
    @echo "  o public/private key pairs"
    @echo "  o SSL certificate signing requests (CSRs)"
    @echo "  o self-signed SSL test certificates"
    @echo
    @echo "To create a key pair, run \"make SOMETHING.key\"."
    @echo "To create a CSR, run \"make SOMETHING.csr\"."
    @echo "To create a test certificate, run \"make SOMETHING.crt\"."
    @echo "To create a key and a test certificate in one file, run \"make SOMETHING.pem\"."
    @echo
    @echo "To create a key for use with Apache, run \"make genkey\"."
    @echo "To create a CSR for use with Apache, run \"make certreq\"."
    @echo "To create a test certificate for use with Apache, run \"make testcert\"."
    @echo
    @echo "To create a test certificate with serial number other than zero, add SERIAL=num"
    @echo
    @echo Examples:
    @echo "  make server.key"
    @echo "  make server.csr"
    @echo "  make server.crt"
    @echo "  make stunnel.pem"
    @echo "  make genkey"
    @echo "  make certreq"
    @echo "  make testcert"
    @echo "  make server.crt SERIAL=1"
    @echo "  make stunnel.pem SERIAL=2"
    @echo "  make testcert SERIAL=3"

%.pem:
    umask 77 ; \
    PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
    PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
    /usr/bin/openssl req $(UTF8) -newkey rsa:1024 -keyout $$PEM1 -nodes -x509 -days 365 -out $$PEM2 -set_serial $(SERIAL) ; \
    cat $$PEM1 >  $@ ; \
    echo ""    >> $@ ; \
    cat $$PEM2 >> $@ ; \
    $(RM) $$PEM1 $$PEM2

%.key:
    umask 77 ; \
    /usr/bin/openssl genrsa -des3 1024 > $@

%.csr: %.key
    umask 77 ; \
    /usr/bin/openssl req $(UTF8) -new -key $^ -out $@

%.crt: %.key
    umask 77 ; \
    /usr/bin/openssl req $(UTF8) -new -key $^ -x509 -days 365 -out $@ -set_serial $(SERIAL)

TLSROOT=/etc/pki/tls
KEY=$(TLSROOT)/private/localhost.key
CSR=$(TLSROOT)/certs/localhost.csr
CRT=$(TLSROOT)/certs/localhost.crt

genkey: $(KEY)
certreq: $(CSR)
testcert: $(CRT)

$(CSR): $(KEY)
    umask 77 ; \
    /usr/bin/openssl req $(UTF8) -new -key $(KEY) -out $(CSR)

$(CRT): $(KEY)
    umask 77 ; \
    /usr/bin/openssl req $(UTF8) -new -key $(KEY) -x509 -days 365 -out $(CRT) -set_serial $(SERIAL)

你可能感兴趣的:(职场,证书,OpenSSL,休闲)