PKI(Public Key Infrastructure)
PKI 是一種新的安全技術,它由公開密鑰密碼技術,數位證書,證書發放機構 (CA:Certification Authority) 和公開密鑰的安全策略等基本成分共同組成的.我們先對密鑰密碼技術,數位證書,證書發放機構 (CA) 等來說明.
- Random Number 為了產生 Key 系統必須要能隨機的產生亂碼,才能讓每次產生的 Key 值皆不同, Linux 會依據當時 mouse 的移動 keyboard 鍵值 disk I/O 運作,來決定 Random Number,而這值會存放在 /dev/random 或 /dev/urandom.
- One Way Hashes One Way Hashes 主要會產生一組固定長度字串(fingerprint or message digests),這組字串用來比對原資料是否遭到修改,它的特性如下 1.原資料輸入長度為可變 2.輸出的 fingerprint 為固定長度 3.當資料任何 byte 改變時, fingerprint 也會變的完全不同 4.我們無法依據 fingerprint 來回推成原資料,這也是為什麼稱為 One Way hash(單方向的資料運算,函數多對一的特性) 既然無法回推成原資料,那怎知資料是否正確, One Way hash 會再將資料再做一次 One Way hash 然後直接比對 fingerprint 是否一樣.md2,md5,mdc2,rmd160,sha,sha1,haval,crc-32 皆是採用 One Way hash Linux 提供 passwd (md5),md5sum [ --check] , openssl , gpg , tripwire ,rpm -V 等工具來產生 fingerprint
- Symmetric Algorithms (對稱式) 所謂的對稱式加密就是加密以及解密都是使用同一支鑰匙(single Key) 其中最典型的為 DES(Data Encryption Standard) 演算法. 它使用的祕鑰長度為 56 bits (但每 8 bits 加上一個奇同位檢查,最後會形成 64 bits 的祕鑰),但這種方式鑰匙必須妥善保存,鑰匙的傳送無法透過網路,因為很容易遭有心人的擷取DES,3DES,Blowfish,RC2,RC4,RC5,IDEA,CAST5 皆是採用對稱式加密來運作 Linux 提供 gpg(3DES,CAST5,Blowfish),openssl 等工具來產生鑰匙(single Key)
- Asymmetric (Public Key) Algorithms (非對稱式)或稱公鑰密碼演算法 非對偁式加密會使用兩把公與私鑰 (Public/Private Key), public key 會當成加密用, Private key 就會當解密用. RSA(以 RSA 的創始人Rivest,Shamir,Adelman 為命名 ),就是用 Asymmetric Encryption (非對稱式),RSA 既能用加密(Asymmetric Encryption I )又能用在數位簽名(Asymmetric Encryption II ),是目前提出的公鑰演算法中最容易理解和實現的.它的運作方式可分為下面幾種:
- I.Asymmetric Encryption I (非對稱式加密 I )
- 接收端 會產生兩把鑰匙 (Public/Private Key), Public Key(P) 會發佈給其他人來使用,而 Private Key (S) 則自己保存
- 傳送端 傳送端會使用 (P) 將資訊 M 來加密, 並將經過加密的資料 P(M) 傳送出去
- 接收端 接收端就可以用私鑰來解密 M=S(P(M)) 這種方式傳送者無法確定接收者的真假
- II.Asymmetric Encryption II (非對稱式加密 II )也就是數位簽證(Digital Signatures)的方式 它主要用在身份的確認,其方法類似 Asymmetric Encryption I 會使用兩把公與私鑰 (Public/Private Key), 它的運作方式不同於 Asymmetric Encryption I,Private key 會當成加密用而 Public key 就會當解密用,方法如下.
- 傳送端 產生兩把鑰匙 (Public/Private Key), Public Key(P) 會發佈給其他人來使用,而 Private Key (S) 則自己保存. 傳送端使用自己產生的 Private key (S) 將資訊 M 來加密, 並將經過加密的資料 S(M) 傳送出去
- 接收端 接收端就可以用傳送者的公鑰來解密 M=P(S(M)) 這種方式的接收者可以確定傳送者,但傳送者無法得知接收者是否由其他人冒充.所以產生下面這兩種方法.
- III.Combined Signature and Encryption 但它的運作方式結合 Asymmetric Encryption I 與 Asymmetric Encryption II
- 傳送端 傳送端/接收端都會產生兩把鑰匙 (Public/Private Key), Public Key(P) ,Public Key(P) 會發佈給其他人來使用,而 Private Key (S) 則自己保存. 傳送端會先用自己產生 Private key 加密,然後再用接收端的 Public key 加密.並將經過加密兩次的資料傳送出去
- 接收端 接收端會先用產生的 Private key 解密,然後再用傳送端的 Public key 解密,就能得到資料. 這樣雙方就可以確認彼此,但資料的真實性還是無法獲得保障所以產生下面的方式.
- IV.Detached Signatures 方法同 Asymmetric Encryption II ,但傳送者會先用 MD5 將資料產生 fingerprint 並傳送給接收者,接收只就可以依據此一 fingerprint 來判斷資料是否遭到修改. DSA (Digital Signature Algorithm) 使用 Detached Signatures(數字簽證演算法),用作數字簽證標準的一部分)這種方式只能用於數字簽證,無法用在加密中,DSA 採用的 One Way Hash 為 SHA. 簡易的數位簽章方式如下 甲為傳送端: 1. 甲準備好要傳送的數字信息(明文)。 2. 甲對數字信息進行哈希(hash)運算,得到一個信息摘要。 3. 甲用自己的私鑰(PK)對信息摘要進行加密得到甲的數字簽名,並將其附在數字信息上。 乙為接收端: 1.乙用甲的公鑰(PK)對甲的數字簽名進行解密,得到信息摘要。 2.乙用相同的 hash 算法對收到的明文再進行一次 hash 運算,得到一個新的信息摘要。 3.乙將收到的信息摘要和新產生的信息摘要進行比較,如果一致,說明收到的信息沒有被修改過。 而完整的數位簽證(Digital Signatures) 的應用方式如下 現有持証人甲向持証人乙傳送數字信息,為了保証信息傳送的真實性、完整性和不可否認性,需要對要傳送的信息進行數字加密和數字簽名,其傳送過程如下: 1. 甲準備好要傳送的數字信息(明文)。 2. 甲對數字信息進行哈希(hash)運算,得到一個信息摘要。 3. 甲用自己的私鑰(PK)對信息摘要進行加密得到甲的數字簽名,並將其附在數字信息上。 4. 甲隨機產生一個加密密鑰(DES密鑰),並用此密鑰對要發送的信息進行加密,形成密文。 5. 甲用乙的公鑰(PK)對剛才隨機產生的加密密鑰進行加密,將加密的DES密鑰連同密文一起傳送給乙。 6. 乙收到甲傳送過來的密文和加過密的DES密鑰,先用自己的私鑰(SK)對加密的DES密鑰進行解密,得到DES密鑰。 7. 乙然用DES密鑰對收到的密文進行解密,得到明文的數字信息,然將DES密鑰拋棄(即DES密鑰作廢)。 8. 乙用甲的公鑰(PK)對甲的數字簽名進行解密,得到信息摘要。 9. 乙用相同的hash算法對收到的明文再進行一次hash運算,得到一個新的信息摘要。 10.乙將收到的信息摘要和新產生的信息摘要進行比較,如果一致,說明收到的信息沒有被修改過。 但這種方式缺少公正性,很容易被第三者在中間假冒,所以需要公正的第三者來處理,這就是下面要說的 CA.
- CA(Certification Authority) 憑證主要是用由三項東西組成的,如下 第一部分是要申請的憑證內容 第二部分是 Public Key 第三部分將剛才的內容(第一二部分)經過 on way hash(如:MD5 , SHA1..)再用他 Root CA 的 Private Key 加密所到的訊息摘要 (Digest Hash) . 這可確定在傳送過程資料不會遭到修改.
CA(Certificate Authority)
Step 0:前言
I.什麼是憑證
憑證主要是用由三項東西組成的,如下
第一部分是要申請的憑證內容
第二部分是 Public Key
第三部分將剛才的內容(第一二部分)經過 on way hash(如:MD5 , SHA1..)再用他 Root CA 的 Private Key 加密所到的訊息摘要 (Digest Hash) . 這可確定在傳送過程資料不會遭到修改.
II.什麼是認證中心
憑證的簽發必須透過公正的第三者來簽發,這也就是 CA 主要的工作,CA 必須確定申請書的內容和申請人本身的資料是相符合的.
III.什麼是最高層認證中心
SSL 採用的是 X.509,由上至下階層式的評證制度.所以簽章是由你上一層發給你的.作業系統通常會預設好幾個 root ca 所以當使用者遇到由這些 root ca 發出來的憑證就可以直接相信.
Step1 :系統需求
CA 並不是一種伺服器服務,所以他並不需要特別的伺服器程式,他只要 openssl 即可
#rpm -ivh openssl....rpm
Step2 : 建立 Root CA(Certification Authority)
SSL 採用的是 X.509,由上至下階層式的評證制度.因為我們並不與其他的 Root CA 來授與憑證.所以我們也要建立屬於自己的 Root CA.
系統預設 SSL 與 CA 路徑為 /usr/share/ssl 以可以將他搬至 /etc/ssl 下來執行
I.製作 Private Key
#openssl genrsa -des3 -out rootca.key 2048
..............................................................................................................................+++
................................+++
e is 65537 (0x10001)
Enter pass phrase for rootca.key:
Verifying - Enter pass phrase for rootca.key:
................................+++
e is 65537 (0x10001)
Enter pass phrase for rootca.key:
Verifying - Enter pass phrase for rootca.key:
以上的指令會產生 2048 bits 的 Private Key ,名稱為 rootca.key ,並且用 des3 的方式加密保護.
#chmod og-rwx rootca.key
建立私鑰後最好將權限加以設限,以免被其他使用者取用.
你可以用下面的指令來看 RSA 產生的 Private Key 內容
#openssl rsa -noout -text -in rootca.key
Enter pass phrase for rootca.key:
Private-Key: (2048 bit)
modulus:
00:cf:d8:f0:0d:6e:fb:a0:03:30:2c:74:64:42:59:
.......................略..............................
publicExponent: 65537 (0x10001)
privateExponent:
00:94:cc:54:1e:e9:e3:4e:4c:ba:02:39:59:45:7e:
.......................略..............................
prime1:
00:e9:26:5d:62:6f:61:1a:f4:15:ca:c4:4d:a8:a8:
.......................略..............................
Private-Key: (2048 bit)
modulus:
00:cf:d8:f0:0d:6e:fb:a0:03:30:2c:74:64:42:59:
.......................略..............................
publicExponent: 65537 (0x10001)
privateExponent:
00:94:cc:54:1e:e9:e3:4e:4c:ba:02:39:59:45:7e:
.......................略..............................
prime1:
00:e9:26:5d:62:6f:61:1a:f4:15:ca:c4:4d:a8:a8:
.......................略..............................
prime2:
00:e4:37:be:a8:3e:c0:c9:79:b5:8b:28:06:2a:63:
.......................略..............................
exponent1:
16:c0:1a:9e:af:55:9f:66:af:f5:b0:40:0f:b4:17:
.......................略..............................
exponent2:
00:a3:62:81:5d:a4:27:93:56:4e:31:85:02:fc:ff:
.......................略..............................
coefficient:
00:d2:89:bb:b8:93:8c:03:b8:ca:d3:53:37:20:66:
.......................略..............................
00:e4:37:be:a8:3e:c0:c9:79:b5:8b:28:06:2a:63:
.......................略..............................
exponent1:
16:c0:1a:9e:af:55:9f:66:af:f5:b0:40:0f:b4:17:
.......................略..............................
exponent2:
00:a3:62:81:5d:a4:27:93:56:4e:31:85:02:fc:ff:
.......................略..............................
coefficient:
00:d2:89:bb:b8:93:8c:03:b8:ca:d3:53:37:20:66:
.......................略..............................
II.填寫憑證申請書
#openssl req -new -key rootca.key -out rootca.csr
Enter pass phrase for rootca.key:
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) [GB]:TW
State or Province Name (full name) [Berkshire]:Taiwan
Locality Name (eg, city) [Newbury]:Taipei
Organization Name (eg, company) [My Company Ltd]:Inventec
Organizational Unit Name (eg, section) []:SIT
Common Name (eg, your name or your server's hostname) []:www.inventec.com
Email Address []:admin@inventec.com
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) [GB]:TW
State or Province Name (full name) [Berkshire]:Taiwan
Locality Name (eg, city) [Newbury]:Taipei
Organization Name (eg, company) [My Company Ltd]:Inventec
Organizational Unit Name (eg, section) []:SIT
Common Name (eg, your name or your server's hostname) []:www.inventec.com
Email Address []:admin@inventec.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
to be sent with your certificate request
A challenge password []:
An optional company name []:
至於申請書的內容要填哪些呢!!
Country Name (2 letter code) [GB]:國家代碼,台灣是 TW
State or Province Name (full name) [Berkshire]:省份,你可以直接填台灣 Taiwan
Locality Name (eg, city) [Newbury]: 城市名,你可以填台北 Taipei
Organization Name (eg, company) [My Company Ltd]:你的組織名稱,通常是公司,我這裡填的是英業達 inventec
Organizational Unit Name (eg, section) []:如果你剛填的是公司,那這就是公司部門的名稱
Common Name (eg, your name or your server's hostname) []:如果是伺服器憑證那就填上伺服器的全名(www.inventec.com) .若是 E-mail 憑證那就填上 E-mail.Root CA 填上組織名稱加上 RSA/2048 以供辨識.
Email Address []:這裡請填上你的 e-mail 信箱
Locality Name (eg, city) [Newbury]: 城市名,你可以填台北 Taipei
Organization Name (eg, company) [My Company Ltd]:你的組織名稱,通常是公司,我這裡填的是英業達 inventec
Organizational Unit Name (eg, section) []:如果你剛填的是公司,那這就是公司部門的名稱
Common Name (eg, your name or your server's hostname) []:如果是伺服器憑證那就填上伺服器的全名(www.inventec.com) .若是 E-mail 憑證那就填上 E-mail.Root CA 填上組織名稱加上 RSA/2048 以供辨識.
Email Address []:這裡請填上你的 e-mail 信箱
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:申請書的密碼,也可以不用設
An optional company name []:代辦憑證的公司名稱,也可以不用設
to be sent with your certificate request
A challenge password []:申請書的密碼,也可以不用設
An optional company name []:代辦憑證的公司名稱,也可以不用設
可用下列指令來看要申請的憑證內容
#openssl req -noout -text -in rootca.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=TW, ST=Taiwan, L=Taipei, O=Inventec, OU=SIT, CN=www.inventec.
com/emailAddress=admin@inventec.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:cf:d8:f0:0d:6e:fb:a0:03:30:2c:74:64:42:59:
.......................................略.........................................
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: md5WithRSAEncryption
8e:92:8a:97:b2:da:45:eb:ec:25:be:21:cc:dd:00:28:05:26:
.......................................略.........................................
Data:
Version: 0 (0x0)
Subject: C=TW, ST=Taiwan, L=Taipei, O=Inventec, OU=SIT, CN=www.inventec.
com/emailAddress=admin@inventec.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:cf:d8:f0:0d:6e:fb:a0:03:30:2c:74:64:42:59:
.......................................略.........................................
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: md5WithRSAEncryption
8e:92:8a:97:b2:da:45:eb:ec:25:be:21:cc:dd:00:28:05:26:
.......................................略.........................................
可以看到的他的內容包括下列的東西
第一部分是要申請的憑證內容
第二部分是 Public Key
第三部分將剛才的內容(第一二部分)經過 on way hash(如:MD5 , SHA1..)再用他的 Private Key 加密所到的訊息摘要 (Digest Hash) . 這可確定在傳送過程資料不會遭到修改.
III.簽發憑證
因為要簽發的是 Root CA 已經沒有上一層了,所以只能自己簽給自己
#openssl x509 -req -signkey rootca.key -in rootca.csr -out rootca.crt
Signature ok
subject=/C=TW/ST=Taiwan/L=Taipei/O=Inventec/OU=SIT/CN=www.inventec.com/emailAddress=admin@inventec.com
Getting Private key
Enter pass phrase for rootca.key:
Signature ok
subject=/C=TW/ST=Taiwan/L=Taipei/O=Inventec/OU=SIT/CN=www.inventec.com/emailAddress=admin@inventec.com
Getting Private key
Enter pass phrase for rootca.key:
可用下列指令來看要簽章的憑證內容
# openssl x509 -noout -text -in rootca.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=TW, ST=Taiwan, L=Taipei, O=Inventec, OU=SIT, CN=www.inventec.com/emailAddress=admin@inventec.com
Validity
Not Before: Feb 10 13:31:02 2004 GMT
Not After : Mar 11 13:31:02 2004 GMT
Subject: C=TW, ST=Taiwan, L=Taipei, O=Inventec, OU=SIT, CN=www.inventec.com/emailAddress=admin@inventec.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
.......................................略.........................................
Exponent: 65537 (0x10001)
Signature Algorithm: md5WithRSAEncryption
58:b4:18:32:f2:e1:c9:b1:37:fd:04:f9:1d:0f:2a:ad:df:9a:
.......................................略.........................................
# openssl x509 -noout -text -in rootca.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=TW, ST=Taiwan, L=Taipei, O=Inventec, OU=SIT, CN=www.inventec.com/emailAddress=admin@inventec.com
Validity
Not Before: Feb 10 13:31:02 2004 GMT
Not After : Mar 11 13:31:02 2004 GMT
Subject: C=TW, ST=Taiwan, L=Taipei, O=Inventec, OU=SIT, CN=www.inventec.com/emailAddress=admin@inventec.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
.......................................略.........................................
Exponent: 65537 (0x10001)
Signature Algorithm: md5WithRSAEncryption
58:b4:18:32:f2:e1:c9:b1:37:fd:04:f9:1d:0f:2a:ad:df:9a:
.......................................略.........................................
可以看到的他的內容包括下列的東西
第一部分是要申請的憑證內容
第二部分是 Public Key
第三部分將剛才的內容(第一二部分)經過 on way hash(如:MD5 , SHA1..)再用他的 Private Key 加密所到的訊息摘要 (Digest Hash) . 這可確定在傳送過程資料不會遭到修改.
憑證建立好之後,申請書就用不到了,所以可以刪除了
#rm rootca.csr
Note:
其實系統有提供寫好的 script 在目錄 /usr/share/ssl/misc 下,你可以直接取用這隻 script "CA" 他的預設值將會對應到 /usr/share/ssl/openssl.conf 檔案.使用方法如下
#./CA -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
.............++++++
........++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [GB]:TW
State or Province Name (full name) [Berkshire]:Taiwan
Locality Name (eg, city) [Newbury]:Taipei
Organization Name (eg, company) [My Company Ltd]:inventec
Organizational Unit Name (eg, section) []:SIT
Common Name (eg, your name or your server's hostname) []:wwww.inventec.com
Email Address []:admin@inventec.com
這樣就會產生一個 demoCA 的目錄
Generating a 1024 bit RSA private key
.............++++++
........++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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) [GB]:TW
State or Province Name (full name) [Berkshire]:Taiwan
Locality Name (eg, city) [Newbury]:Taipei
Organization Name (eg, company) [My Company Ltd]:inventec
Organizational Unit Name (eg, section) []:SIT
Common Name (eg, your name or your server's hostname) []:wwww.inventec.com
Email Address []:admin@inventec.com
這樣就會產生一個 demoCA 的目錄
憑證存放在 /usr/share/ssl/demoCA/cacert.pem
私鑰存放在 /usr/share/ssl/misc/demoCA/private/cakey.pem
如果不滿意這些預設值,你可以直接修改 /usr/share/ssl/openssl.conf 檔案.然後再產生一次就可以了.
Step 3.製作伺服器用的憑證
I.製作 Private Key
# openssl genrsa -out host.key 2048
Generating RSA private key, 2048 bit long modulus
..................................................................................................................+++
............................+++
e is 65537 (0x10001)
Generating RSA private key, 2048 bit long modulus
..................................................................................................................+++
............................+++
e is 65537 (0x10001)
我們這裡不用密碼來保護,因為系統開機時有用到這 Private Key 的服務時都會問密碼.如果人在遠端時我們就無法順利開機了.
#chmod og-rwx host.key
建立私鑰後最好將權限加以設限,以免被其他使用者取用.
II.填寫憑證申請書
# openssl req -new -key host.key -out host.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) [GB]:TW
State or Province Name (full name) [Berkshire]:Taiwan
Locality Name (eg, city) [Newbury]:Taipei
Organization Name (eg, company) [My Company Ltd]:TDC
Organizational Unit Name (eg, section) []:SIT
Common Name (eg, your name or your server's hostname) []:www.tdc.com
Email Address []:admin@tdc.com
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) [GB]:TW
State or Province Name (full name) [Berkshire]:Taiwan
Locality Name (eg, city) [Newbury]:Taipei
Organization Name (eg, company) [My Company Ltd]:TDC
Organizational Unit Name (eg, section) []:SIT
Common Name (eg, your name or your server's hostname) []:www.tdc.com
Email Address []:admin@tdc.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
to be sent with your certificate request
A challenge password []:
An optional company name []:
III.簽發憑證
openssl x509 -req -CAserial rootca.srl -CAkey rootca.key -in host.csr -out host.crt -CA rootca.crt
Signature ok
subject=/C=TW/ST=Taiwan/L=Taipei/O=TDC/OU=SIT/CN=www.tdc.com/emailAddress=admin@tdc.com
Getting CA Private Key
Enter pass phrase for rootca.key:
Signature ok
subject=/C=TW/ST=Taiwan/L=Taipei/O=TDC/OU=SIT/CN=www.tdc.com/emailAddress=admin@tdc.com
Getting CA Private Key
Enter pass phrase for rootca.key:
我們要用上一層的 Root CA 來進行簽章的動作.
而這裡的 rootca.srl 只是簽章時給的序號,內容就是號碼(01),憑證有了就可以開始應用了.
憑證建立好之後,申請書就用不到了,所以可以刪除了
#rm host.csr
Step4 :應用
I.htpp with SSL (還沒寫)
SSL(Secure Socket Layer)
Step 0:前言
SSL 是 Netscape 所提出來的資料保密協定,採用了 RC4,MD5,以及 RSA 等加密演算法再加上 CA(Certification Authority) 來確定身份所組成的.
RC4 為 Symmetric Algorithms 對稱式加密的一種,而所謂的對稱式加密就是加密以及解密都是使用同一支鑰匙(single Key)
MD5 為 One Way Hashes 的一種.他主要會產生一組固定長度字串(fingerprint or message digests),這組字串用來比對原資料是否遭到修改.
RSA 為 Asymmetric (Public Key) Algorithms (非對稱式)或稱公鑰密碼演算法的一種.而所謂的非對偁式加密會使用兩把公與私鑰 (Public/Private Key), public key 會當成加密用, Private key 就會當解密用
CA(Certification Authority) 公正的第三者,主要用來驗證公鑰的真假.
note:以上的加解密方式也可以使用不同的其他演算法來取代.如 MD5 可用 SHA1 來取代.... 其他請參考 PKI (Public Key Infrastructure).
Step1:SSL 交易方式
1.所謂的 SSL 就是伺服器端和使用者端的資料都經過加密的方式來傳送,而這之鑰匙就是 RC4 (對稱式加密),而這隻鑰匙是無法透過網路來傳送.因為當別人擷取這把鑰匙時,他也可以用這把鑰匙對你們的資訊加解密.
2.所以此時就可以用 RSA (公私鑰,非對稱式加解密)方式來傳送這把鑰匙,所以一開始時伺服器會把他的公鑰給使用者.經過公鑰將 RC4 產生的鑰匙做加密,然後經由網路傳送,至伺服器端再用 RSA 的私鑰將資料解密還原成原本的 RC4 產生的鑰匙.
note:
看到這你或許會覺得奇怪,為何不用非對稱式的公鑰來做全程的加解密.第一因為非對稱加密的演算法很消耗 CPU 的資源所以不適合大量的資料的加解密,但是對稱式的鑰匙卻很適合大量的資料的加解密,但是他無法直接使用網路上來傳送,因為有可能被擷取,所以對稱式鑰匙被非對稱式的公鑰包在一起,傳送到伺服器端期間,只有伺服器有非對稱式的私鑰能解開.所以能很安全的傳給伺服器.之後的 SSL 連線中都會使用這對稱式的鑰匙加解密.
3.這樣看似安全其實不然,因為使用者無法確定伺服器端的真假(經過假的 DNS Server 使用者可能被導向假的伺服器端),所以使用 CA(Certification Authority) 來進行伺服器端的身份確認.因此伺服器端不只會單給 public key 還會加上數位簽名的憑證.而這東西的內容如下.
-------------------------------------------------------------------------------------------------------------
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=TW, ST=Taiwan, L=Taipei, O=Verisign, OU=IT, CN=www.verisign.com/emailAddress=admin@verisign.com
Validity
Not Before: Feb 9 14:19:35 2004 GMT
Not After : Feb 6 14:19:35 2014 GMT
Subject: C=TW, ST=Taipei, L=Taiwan, O=TDC, OU=SIT, CN=www.tdc.com/emailAddress=admin@tdc.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:a8:03:0f:27:3e:52:b6:e7:33:ab:8d:c2:39:13:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=TW, ST=Taiwan, L=Taipei, O=Verisign, OU=IT, CN=www.verisign.com/emailAddress=admin@verisign.com
Validity
Not Before: Feb 9 14:19:35 2004 GMT
Not After : Feb 6 14:19:35 2014 GMT
Subject: C=TW, ST=Taipei, L=Taiwan, O=TDC, OU=SIT, CN=www.tdc.com/emailAddress=admin@tdc.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit)
Modulus (2048 bit):
00:a8:03:0f:27:3e:52:b6:e7:33:ab:8d:c2:39:13:
...................................略..................................................
9e:7b:cc:e1:b5:82:c0:1a:65:27:af:c4:26:01:bf:
9b:5f
Exponent: 65537 (0x10001)
Signature Algorithm: sha1WithRSAEncryption a2:76:86:13:b9:42:ee:2b:80:bd:19:70:8f:7f:54:39:ce:00:
...................................略..................................................
9e:7b:cc:e1:b5:82:c0:1a:65:27:af:c4:26:01:bf:
9b:5f
Exponent: 65537 (0x10001)
Signature Algorithm: sha1WithRSAEncryption a2:76:86:13:b9:42:ee:2b:80:bd:19:70:8f:7f:54:39:ce:00:
...................................略..................................................
7c:a7:00:a3:e1:f8:f9:e4:01:ab:c7:ff:15:fe:d5:fc:b9:33:
c0:b9:82:5f
-------------------------------------------------------------------------------------------------------------
c0:b9:82:5f
-------------------------------------------------------------------------------------------------------------
可以看到的他的內容包括下列的東西
第一部分是憑證的內容包括一些是誰簽發給誰的到期日等資訊.
第二部分是伺服器端的 Public Key
第三部分是上一層 CA 在簽發憑證時,將剛才的內容(第一二部分)經過 on way hash(如:MD5 , SHA1..)再用他的 Private Key 加密所到的訊息摘要 (Digest Hash) . 這可確定在傳送過程資料不會遭到修改.
因為這一段訊息摘要是用上一層 CA 的 Private Key 加密,所以使用者端必先要匯入他的 Public Key,後面的範例會再說明.
note:關於數位簽名請參考 PKI(Private Key Infrastructure)
4.使用者端接到這 public key 加上數位簽名的憑證,會先去檢查資料是否遭到修改.
方法如下:
I. 一開始決定用哪些方法加解密的 ,資料訊息包括這些 Signature Algorithm: sha1WithRSAEncryption (這裡是用 SHA1 加上 RSA)
II.先用對方的上一層的公鑰將資料解密.
III.再將第一二部分的資料做出 SHA1 的訊息摘要
IV.比對兩個訊息摘要是否相同,相同則表示訊息未被修改.
V.這時候就可以確定伺服器端身份.
5.然後使用者會產生對稱式鑰匙,並將他得到伺服器端的 Public Key 來加密,等到伺服器端使用者端都有鑰匙後,就使用這鑰匙來進行接下來的交易.
Step2:網頁伺服器與遊覽器之間的 SSL 實際範例
我們先用瀏覽器來看看網頁伺服器加上 SSL 的用戶端是怎麼運作的,先打開瀏覽器去看中國信託的網站 http://www.chinatrust.com.tw/ 並且登入他的網路銀行 ,你會看到如下圖所示:
首先你會看到 http 變成 https ,表示就是 http 使用了 SSL ,而它使用的 port 為 443
你還會看到瀏覽器的右下方多了一個鑰使形狀的東西,把它點兩下,就會完整看到 SSL 的相關訊息
這裡是與公私鑰相關的資訊.
這邊會看到與 CA (Certification Authority)相關的資料.
至於我們的瀏覽器(Explorer or Mozilla....)跟網頁伺服器(IIS or Apache...)之間是怎麼運作的說明如下:
當使用者上網時要和網頁伺服器以 SSL 進行溝通時,網頁伺服器會給使用者他的公鑰,這把鑰匙和私鑰為一對,以公鑰的加密的資料只有私鑰能解開.但是此時使用者卻不能確定中國信託的這把公鑰的真假.因為網站也有可能被假冒,所以要經過公正的第三者 CA(Certification Authority)來確定這鑰匙的真假.
微軟的遊覽器 IE 預設上就已經幫我們設定了一些公正的 CA(Certification Authority),我們可以透過 IE 的工具/網際網路選項/內容/憑證/信任的根憑證授權,如下圖所示:
你會看到好幾個 CA 其中的一個 VeriSign 就是發給中國信託的 CA ,他只檢查數位簽章,經過一番的確認後使用者就會傳送一把對稱式的鑰匙給網頁伺服器,當然這鑰匙也經過網頁伺服器的公鑰加密才傳送出去的.之後的交易都會透過這一把鑰匙的加解密來傳送.
每個環節都必須正確才能讓 SSL 的交易進行下去.其中的 CA 佔有很大的部分.當遊覽器遇到不認識的網頁公鑰.這時遊覽器就會讓使用者來決定是否相信這把公鑰的正確性.你會看到如下圖所示:
解決方式請參考 http with ssl (還沒寫)
No comments:
Post a Comment