卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

應(yīng)用數(shù)字證書 保證交易安全

應(yīng)用數(shù)字證書 保證交易安全2007-01-02 10:48:18網(wǎng)絡(luò)的安全問題得到人們的日益重視。網(wǎng)絡(luò)面臨的威脅五花八門:內(nèi)部竊密和破壞、截收、非法訪問、破壞信息的完整性、冒充和破壞系統(tǒng)的可用性、重演

應(yīng)用數(shù)字證書 保證交易安全

2007-01-02 10:48:18

網(wǎng)絡(luò)的安全問題得到人們的日益重視。網(wǎng)絡(luò)面臨的威脅五花八門:內(nèi)部竊密和破壞、截收、非法訪問、破壞信息的完整性、冒充和破壞系統(tǒng)的可用性、重演及抵賴等。于是公鑰基礎(chǔ)設(shè)施(Public Key Infrastructure,PKI )應(yīng)運(yùn)而生。PKI 是電子商務(wù)和其它信息系統(tǒng)的安全基礎(chǔ),用來建立不同實(shí)體間的“信任”關(guān)系。它的基礎(chǔ)是加密技術(shù),核心是證書服務(wù)。用戶使用由證書授權(quán)認(rèn)證中心(Certificate Authority,CA )簽發(fā)的數(shù)字證書,結(jié)合加密技術(shù),可以保證通信內(nèi)容的保密性、完整性、可靠性及交易的不可抵賴性,并可以進(jìn)行用戶身份的識(shí)別。 本文分析公鑰基礎(chǔ)設(shè)施涉及的5個(gè)主要算法和應(yīng)用:數(shù)字簽名、數(shù)字信封、數(shù)字證書、私鑰管理和密鑰協(xié)定,描述目前電子政務(wù)CA 建設(shè)中雙證書體系的概念,接著講述如何用Openssl 作認(rèn)證中心、申請(qǐng)證書和使用證書,最后講述SSL 協(xié)議如何使用證書和加密技術(shù)建立安全通信通道。

數(shù)字證書算法

數(shù)字簽名

數(shù)字簽名算法包括簽名過程和識(shí)別過程兩部分(見圖1)。簽名過程是簽名者使用自己的私鑰對(duì)消息的摘要進(jìn)行加密的過程,被加密的摘要就是簽名。為什么只對(duì)消息的摘要進(jìn)行加密呢?因?yàn)樗械墓€加密算法在加密速度上比較慢(相對(duì)對(duì)稱加密算法),同時(shí)消息摘要算法具有單一性,即不可能具有兩個(gè)消息在同一摘要算法的運(yùn)算下產(chǎn)生相同的摘要,算法產(chǎn)生的消息摘要具有固定長(zhǎng)度(比如128位),所以利用公鑰加密算法才比較合適。簽名和原消息一起形成了簽名消息。簽名消息經(jīng)過信息傳遞渠道可以發(fā)送到多個(gè)接收者手中,后者利用消息發(fā)送者的證書對(duì)簽名進(jìn)行解密,得到摘要2,簽名消息中的原文被同樣的摘要算法進(jìn)行運(yùn)算得到消息摘要1,兩個(gè)摘要進(jìn)行對(duì)比,接收者就可以判斷消息的完整性。同樣發(fā)送者也不能對(duì)消息的發(fā)送進(jìn)行抵賴。值得注意的是,整個(gè)過程中,接收者不需要任何自己的東西,任何人只要具有發(fā)送者的證書,不會(huì)涉及一絲的保密信息就可以驗(yàn)證消息。

數(shù)字簽名中的證書在雙證書機(jī)制中也被稱為簽名證書,簽名證書的私鑰被消息的發(fā)送者唯一保存。

,

圖1 數(shù)字簽名過程圖

數(shù)字信封

數(shù)字信封就是消息加密,具體操作見圖2。利用對(duì)稱加密算法(比如DES) 對(duì)比較長(zhǎng)的消息(相對(duì)密鑰) 進(jìn)行加密,再利用接收者的證書對(duì)密鑰進(jìn)行加密,加密消息和加密密鑰一起發(fā)送給消息接收者。后者利用自己的私鑰對(duì)加密密鑰解密得到密鑰,接著用密鑰對(duì)加密消息進(jìn)行解密得到消息原文。與數(shù)字簽名一樣,消息的發(fā)送者不會(huì)涉及任何保密內(nèi)容,只要知道接收者證書的人都可以向他發(fā)送數(shù)據(jù)信封封裝消息。

數(shù)字信封應(yīng)用不僅在商業(yè)中很受關(guān)注,在國(guó)家安全和商業(yè)損失上都很受重視,相應(yīng)的私鑰托管就出現(xiàn)了。私鑰托管指證書的所有者除了自己擁有證書對(duì)應(yīng)的私鑰外,還必須把自己的私鑰交給一個(gè)或多個(gè)國(guó)家指定的托管機(jī)構(gòu)進(jìn)行保管。為了加強(qiáng)安全和減少腐敗,每個(gè)托管機(jī)構(gòu)只保管私鑰的一部分。私鑰托管可以應(yīng)付以下情況:當(dāng)私鑰的所有者丟失私鑰,但手頭已有大量的重要數(shù)字信封封裝消息時(shí),私鑰的所有者可以申請(qǐng)獲得私鑰。當(dāng)國(guó)家機(jī)關(guān)獲得授權(quán)要對(duì)某個(gè)可疑人士進(jìn)行信息跟蹤時(shí),可以申請(qǐng)獲得私鑰。數(shù)字信封應(yīng)用中的證書在雙證書體系中又叫加密證書。注意數(shù)字信封應(yīng)用中加密消息的不是證書本身,而是公鑰加密的密鑰。

,

圖二 數(shù)字信封

數(shù)字證書

證書的申請(qǐng)者利用對(duì)稱鑰算法產(chǎn)生一對(duì)公鑰和私鑰,接著使用證書申請(qǐng)算法把自己的標(biāo)識(shí)和公鑰變成證書簽名申請(qǐng)文件。CA 證書認(rèn)證中心用自己的私鑰對(duì)證書信息進(jìn)行簽名形成申請(qǐng)者的證書。

CA 也可以用數(shù)字簽名發(fā)放證書收回列表(見圖3)。在證書信息中可以有證書擁有者的名字、電子郵件、授權(quán)信息等其它消息。

,

圖三 數(shù)字證書

私鑰管理

私鑰在PKI 系統(tǒng)中非常重要,私鑰的泄密會(huì)給所有者造成不可預(yù)估的損失。在個(gè)人的私鑰管理中,一般通過口令對(duì)私鑰進(jìn)行加密保存,另用“所有和所知”雙重防護(hù)進(jìn)行保護(hù)。這種方法適用于簽名證書私鑰的管理,見圖4。

為了監(jiān)視和防止計(jì)算機(jī)犯罪活動(dòng),人們提出了密鑰托管(Key Escrow ,KE )的概念,指國(guó)家強(qiáng)制規(guī)定進(jìn)行的私鑰托管。為防止用戶逃避托管,密鑰托管技術(shù)的實(shí)施需要通過政府的強(qiáng)制措施進(jìn)行。用戶必須先委托密鑰托管機(jī)構(gòu)(KEA )進(jìn)行密鑰托管,取得托管證書,才能向CA 申請(qǐng)加密證書。CA 必須在收到加密公鑰對(duì)應(yīng)的私鑰托管證書后,再簽發(fā)相應(yīng)的公鑰證書。為了防止KEA 濫用權(quán)限及托管密要的泄漏,用戶的私鑰被分成若干部分,由不同的密鑰托管機(jī)構(gòu)負(fù)責(zé)保存。只有將所有的私鑰分量合在一起,才能恢復(fù)用戶私鑰的有效性。用戶選擇若干個(gè)KEA ,分給每一個(gè)代理一部分私鑰和一部分公鑰。代理根據(jù)所得的密鑰分量產(chǎn)生相應(yīng)的托管證書。證書中包括該用戶的特定表示符(Unique Identify,UID )、被托管的那部分公鑰和私鑰、托管證書的編號(hào)。KEA 還要用自己的簽名私鑰對(duì)托管證書進(jìn)行加密,產(chǎn)生數(shù)字簽名,并將其附在托管證書上。用戶收到所有的托管證書后,將證書和完整的公鑰遞交給CA ,然后申請(qǐng)證書。這種機(jī)制適用于加密證書私鑰的管理。這樣簽名證書的私鑰世界上只有一份,而加密證書私鑰就可能有若干份了。

,

圖四 私鑰管理

密鑰協(xié)定

密鑰算法在加密大規(guī)模內(nèi)容時(shí)更加有效(見圖5) 。使得通信雙方對(duì)加密密鑰達(dá)成共識(shí)的應(yīng)用叫密鑰協(xié)定。內(nèi)容傳輸之前雙方經(jīng)過密鑰協(xié)定算法得到共同的密鑰,之后大家就可以利用非對(duì)稱加密算法對(duì)通信信道進(jìn)行加密。典型的密鑰協(xié)定有PKCS #3,即Diffie-Hellman 協(xié)定標(biāo)準(zhǔn)。 PKCS #3算法由兩個(gè)階段組成,而且通信雙方都是互相獨(dú)立運(yùn)算。第二階段互用對(duì)方第一階段的公有輸出值作為輸入的一部分,最后得到一致的密鑰。密鑰不必在通信信道上傳輸。其實(shí)在數(shù)字信封中也有密鑰交換的過程,只是密鑰由發(fā)送方計(jì)算,用接受方公鑰加密,接著傳輸給接受方。因?yàn)槊荑€被接受方的公鑰加密,所以只有接受方能解密得到密鑰。

,

圖五 密鑰協(xié)定

使用Openssl 管理證書

服務(wù)方制作CA

1.為CA 生成一個(gè)私鑰

$ openssl genrsa -des3 -out ca.key 1024

用以上命令將生成一個(gè)RSA 私鑰,利用Triple-DES 加密,輸出格式為PEM 。備份上面生成的私鑰ca.key 很重要。在指令執(zhí)行期間,需要輸入訪問私鑰的口令。這個(gè)口令需要好好保存。

$ openssl rsa -noout -text -in ca.key

上面的指令可以顯示私鑰的內(nèi)容,指令處理私鑰之前會(huì)向你詢問訪問私鑰的口令。用下面的指令可以生成一個(gè)不需要口令保護(hù)的私鑰,但不建議這樣做:

$ openssl rsa -in ca.key -out ca.key.unsecure

上面的三個(gè)指令用的都是RSA 體系,OPENSSL 還提供DSA 體系指令。

2.用私鑰創(chuàng)建一個(gè)自簽名X509 證書

$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt

以上指令用剛才生成的私鑰制作了一個(gè)自簽名的證書,雖然req 命令主要用于生成和處理證書請(qǐng)求,生成自簽名證書是一個(gè)額外的功能。你可以用下面的指令查看證書的內(nèi)容:

,

$ openssl x509 -noout -text -in ca.crt

服務(wù)方制作證書管理環(huán)境

證書的管理有證書系列號(hào)的分配、證書的保存、證書的狀態(tài),Openssl 提供的CA 程序就是這樣一個(gè)命令,證書管理比較復(fù)雜,在沒有很好的GUI 界面程序出現(xiàn)之前最好用如下的腳本來頒發(fā)證書。這個(gè)腳本首先會(huì)在當(dāng)前目錄下生成一個(gè)目錄ca.db.certs 。這個(gè)目錄用來保存發(fā)放的證書,文件名的形式為“系列號(hào).pem”。腳本還會(huì)生成一個(gè)ca.db.series 的文件,保存當(dāng)前頒發(fā)證書的系列號(hào)。生成的另外一個(gè)文件是ca.db.index ,這是一個(gè)索引文件,保存了系列號(hào)和證書的DN 名的映射。腳本接著生成一個(gè)配置文件,之后以配置文件、申請(qǐng)證書的請(qǐng)求為材料調(diào)用CA 程序生成用戶的證書。Openssl 提供的CA 程序?yàn)榘言瓉淼腸a.db.index 和ca.db.series 保存為相應(yīng)的.old 文件并生成新的文件,而且在ca.db.certs 目錄下保存了用戶證書的一個(gè)副本。最后腳本清除現(xiàn)場(chǎng)退出。 #!/bin/sh

##

## sign.sh -- Sign a SSL Certificate Request (CSR)

## Copyright (c) 1998-2001 Ralf S. Engelschall, All Rights Reserved.

##

# argument line handling

CSR=$1

if [ $# -ne 1 ]; then

echo "Usage: sign.sh .csr"; exit 1

fi

if [ ! -f $CSR ]; then

echo "CSR not found: $CSR"; exit 1

fi

case $CSR in

*.csr ) CERT="`echo $CSR | sed -e ''s/.csr/.crt/''`" ;;

* ) CERT="$CSR.crt" ;;

esac

# make sure environment exists

if [ ! -d ca.db.certs ]; then

mkdir ca.db.certs

fi

if [ ! -f ca.db.serial ]; then

echo ''01'' >ca.db.serial

fi

if [ ! -f ca.db.index ]; then

cp /dev/null ca.db.index

fi

,

# create an own SSLeay config

cat >ca.config <

[ ca ]

default_ca = CA_own

[ CA_own ]

dir = .

certs = $dir

new_certs_dir = $dir/ca.db.certs database = $dir/ca.db.index serial = $dir/ca.db.serial RANDFILE = $dir/ca.db.rand certificate = $dir/ca.crt

private_key = $dir/ca.key

default_days = 365

default_crl_days = 30

default_md = md5

preserve = no

policy = policy_anything

[ policy_anything ]

countryName = optional

stateOrProvinceName = optional

localityName = optional

organizationName = optional

organizationalUnitName = optional

commonName = supplied emailAddress = optional

EOT

# sign the certificate

echo "CA signing: $CSR -> $CERT:"

openssl ca -config ca.config -out $CERT -infiles $CSR echo "CA verifying: $CERT <-> CA cert"

openssl verify -CAfile ca.crt $CERT

# cleanup after SSLeay

rm -f ca.config

rm -f ca.db.serial.old

rm -f ca.db.index.old

# die gracefully

exit 0

,

用戶申請(qǐng)證書

1.先生成私鑰

使用下面的命令用戶可生成一個(gè)RSA 私鑰,用Triple-DES 加密, 密鑰的輸出格式為PEM ,指令執(zhí)行時(shí)會(huì)詢問日后訪問私鑰的口令。注意妥善保管好私鑰和訪問私鑰的口令:

$ openssl genrsa -des3 -out tom.key 1024

用下面的指令可以查看私鑰內(nèi)容(需要提供私鑰訪問口令):

$ openssl rsa -noout -text -in tom.key

你也可以生成一個(gè)不需要口令訪問的私鑰:

$ openssl rsa -in tom.key -out tom.key.unsecure

2.用如上的私鑰生成一個(gè)證書簽名申請(qǐng)(CSR) :

$ openssl req -new -key tom.key -out tom.csr

你需要提供識(shí)別全限定域名(FQDN ),比如:

有些內(nèi)容可以填寫,有些內(nèi)容可以不填,全限定名非常重要。人家信不信任你基本就靠它了。另外注意填寫E-mail 或電話之類的,證書頒發(fā)機(jī)構(gòu)便于與你聯(lián)系。當(dāng)然你也可以用下面的指令查看請(qǐng)求內(nèi)容:

$ openssl req -noout -text -in tom.csr

證書簽名申請(qǐng),也可以使用其它的程序。一些需要使用證書的程序都有這個(gè)功能,比如微軟的IIS 服務(wù)器。

服務(wù)方頒發(fā)證書

當(dāng)服務(wù)方接到用戶的CSR 文件之后(CSR 文件的傳遞方式可以是E-mail 或網(wǎng)上提

,

交),可以用CSR 里的E-mail 或電話等聯(lián)系方式和用戶確認(rèn)信息。在決定頒發(fā)證書之后,執(zhí)行下面指令生成用戶證書:

$ sign.sh tom.csr

生成的tom.crt 就是用戶證書。

用戶獲得證書

用戶獲得證書后,可以用內(nèi)容文字編輯器打開證書。Openssl 程序輸出的證書缺省為PEM 格式,證書的全部?jī)?nèi)容在“-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----”之間。注意不要修改“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”之間的任何部分,其它的內(nèi)容可以去掉。

對(duì)于那些不能識(shí)別PEM 格式證書的程序,可以用下面的指令生成DER 格式的證書:

$ openssl x509 -in tom.crt -out cert.der -outform DER

用戶使用證書

1.?dāng)?shù)字簽名

smime 指令的-sign 參數(shù)用于對(duì)郵件進(jìn)行簽名:

$openssl smime -sign -in my.txt -out my.sign -inkey tom.key -singer tom.crt

2.驗(yàn)證簽名

smime 指令的-verify 參數(shù)用于對(duì)郵件簽名進(jìn)行驗(yàn)證:

$openssl smime -verify -in my.sign -out my.txt -ceritfile tom.crt -CAfile ca.crt

3.?dāng)?shù)字信封(加密)

smime 指令的- encrypt參數(shù)用于對(duì)郵件進(jìn)行加密:

$openssl smime -encrypt -in my.txt -out my.enc tom.crt

4.?dāng)?shù)字信封(解密)

smime 指令的- encrypt參數(shù)用于對(duì)郵件進(jìn)行解密:

$openssl smime -decrypt -in my.enc -out my.txt1 -inkey tom.key -recip tom.crt

5.簽名后加密

smime 指令的-sign 參數(shù)用于對(duì)郵件進(jìn)行簽名,接著smime 指令的- encrypt 參數(shù)用

標(biāo)簽: