1,553 瀏覽數

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 即可

[root@benjr ~]# 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

[root@benjr ~]# openssl genrsa -des3 -out rootca.key 2048
………………………………………………………………………………………………………………+++…………………………..+++
e is 65537 (0×10001)
Enter pass phrase for rootca.key:
Verifying – Enter pass phrase for rootca.key:

以上的指令會產生 2048 bits 的 Private Key ,名稱為 rootca.key ,並且用 des3 的方式加密保護.

[root@benjr ~]# chmod og-rwx rootca.key

建立私鑰後最好將權限加以設限,以免被其他使用者取用.你可以用下面的指令來看 RSA 產生的 Private Key 內容

[root@benjr ~]# 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 (0×10001)
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:
…………………..略…………………………

II.填寫憑證申請書

[root@benjr ~]# 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]:benjr
Organizational Unit Name (eg, section) []:SIT
Common Name (eg, your name or your server’s hostname) []:www.benjr.tw
Email Address []:admin@benjr.tw
Please enter the following ‘extra’ attributes
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]:你的組織名稱,通常是公司,我這裡填的是 benjr
Organizational Unit Name (eg, section) []:如果你剛填的是公司,那這就是公司部門的名稱
Common Name (eg, your name or your server’s hostname) []:如果是伺服器憑證那就填上伺服器的全名(www.benjr.tw) .若是 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 []:代辦憑證的公司名稱,也可以不用設
可用下列指令來看要申請的憑證內容

[root@benjr ~]# openssl req -noout -text -in rootca.csr
Certificate Request:
Data:
Version: 0 (0×0)
Subject: C=TW, ST=Taiwan, L=Taipei, O=benjr, OU=SIT, CN=www.benjr.
tw/emailAddress=admin@benjr.tw
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 (0×10001)
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 已經沒有上一層了,所以只能自己簽給自己

[root@benjr ~]# openssl x509 -req -signkey rootca.key -in rootca.csr -out rootca.crt
Signature ok
subject=/C=TW/ST=Taiwan/L=Taipei/O=benjr/OU=CEO/CN=www.benjr.tw/emailAddress=admin@benjr.tw
Getting Private key
Enter pass phrase for rootca.key:

可用下列指令來看要簽章的憑證內容

[root@benjr ~]# openssl x509 -noout -text -in rootca.crt
Certificate:
Data:
Version: 1 (0×0)
Serial Number: 0 (0×0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=TW, ST=Taiwan, L=Taipei, O=benjr, OU=CEO,CN=www.benjr.tw/emailAddress=admin@benjr.tw
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=benjr, OU=CEO,CN=www.benjr.tw/emailAddress=admin@benjr.tw
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Modulus (2048 bit):
…………………………………略…………………………………..
Exponent: 65537 (0×10001)
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) . 這可確定在傳送過程資料不會遭到修改.

憑證建立好之後,申請書就用不到了,所以可以刪除了

[root@benjr ~]# rm rootca.csr

Note:
其實系統有提供寫好的 script 在目錄 /usr/share/ssl/misc 下,你可以直接取用這隻 script  “CA" 他的預設值將會對應到 /usr/share/ssl/openssl.conf 檔案.使用方法如下

[root@benjr ~]# ./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]:benjr
Organizational Unit Name (eg, section) []:CEO
Common Name (eg, your name or your server’s hostname) []:wwww.benjr.tw
Email Address []:admin@benjr.tw

這樣就會產生一個 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

[root@benjr ~]# openssl genrsa -out host.key 2048
Generating RSA private key, 2048 bit long modulus
……………………………………………………………………………………………………+++
……………………….+++
e is 65537 (0×10001)

我們這裡不用密碼來保護,因為系統開機時有用到這 Private Key 的服務時都會問密碼.如果人在遠端時我們就無法順利開機了.

[root@benjr ~]# chmod og-rwx host.key

建立私鑰後最好將權限加以設限,以免被其他使用者取用.

II.填寫憑證申請書

[root@benjr ~]# 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
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

III.簽發憑證

[root@benjr ~]# 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:

我們要用上一層的 Root CA 來進行簽章的動作.
而這裡的 rootca.srl 只是簽章時給的序號,內容就是號碼(01),憑證有了就可以開始應用了.
憑證建立好之後,申請書就用不到了,所以可以刪除了

[root@benjr ~]# rm host.csr

Step4 :應用

I.htpp with SSL (還沒寫)

2 個網友的想法 “CA – Certificate Authority

  1. 自動參照通知: 工具程式 | Benjr.tw

  2. 自動參照通知: PKI | Benjr.tw

發表迴響