加密
三者的联合使用会保证数据的安全机制
A:发送者 B:接收方
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)