OpenSSL加密与证书
加密
三者的聯合使用會保證數據的安全機制
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)
轉載于:https://blog.51cto.com/linuxbpm/364551
總結
以上是生活随笔為你收集整理的OpenSSL加密与证书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用SQL Server 监控 OS Se
- 下一篇: PB-treeview基本属性事件函数