本文主要介紹在使用負載均衡服務中相關證書的含義,以及上傳、配置方法。
<b>說明</b>:
伺服器證書是用于使用者浏覽器檢查伺服器送過來的證書是否是由自己信賴的中心所簽發的,伺服器證書需要上傳到 slb 控制台;
ca 證書作用:伺服器要求客戶浏覽器發送自己的證書,收到後伺服器用 ca 證書驗證客戶浏覽器的證書(即 client 證書),如果沒有通過驗證,拒絕連接配接,
ca 證書在開啟雙向認證功能後也需要上傳到 slb 控制台,對于開啟雙向認證功能一般使用者可以選擇使用 openssl 生成自簽 ca 證書和 client 證書。<b> </b>
在 /root 目錄下建立 ca 檔案夾,進入 ca,建立幾個子檔案夾:
<b>$ sudo mkdir ca</b>
<b>$ cd ca</b>
<b>$ sudo mkdir newcerts private conf server</b>
newcerts 子目錄将用于存放 ca 簽署過的數字證書(證書備份目錄);private 用于存放 ca 的私鑰;conf 目錄用于存放一些簡化參數用的配置檔案;server 存放伺服器證書檔案。
<b>1. conf</b> <b>目錄建立</b> <b>openssl.conf</b> <b>檔案</b><b> </b>
編輯其内容如下:
<code>[ ca ]</code>
<code>default_ca = foo # the</code><code>default</code> <code>ca section</code>
<code>[ foo ]</code>
<code>dir = /root/ca # top dir</code>
<code>database = /root/ca/index.txt # index file.</code>
<code>new_certs_dir = /root/ca/newcerts #</code><code>new</code> <code>certs dir</code>
<code>certificate = /root/ca/</code><code>private</code><code>/ca.crt # the ca cert</code>
<code>serial = /root/ca/serial # serial no file</code>
<code>private_key = /root/ca/</code><code>private</code><code>/ca.key # ca</code><code>private</code> <code>key</code>
<code>randfile = /root/ca/</code><code>private</code><code>/.rand # random number file</code>
<code>default_days =</code><code>365</code> <code># how</code><code>long</code> <code>to certify</code><code>for</code>
<code>default_crl_days=</code><code>30</code> <code># how</code><code>long</code> <code>before next crl</code>
<code>default_md = md5 # message digest method to use</code>
<code>unique_subject = no # set to</code><code>'no'</code> <code>to allow creation of</code>
<code> </code><code># several ctificates with same subject.</code>
<code>policy = policy_any #</code><code>default</code> <code>policy</code>
<code>[ policy_any ]</code>
<code>countryname = match</code>
<code>stateorprovincename = match</code>
<code>organizationname = match</code>
<code>organizationalunitname = match</code>
<code>localityname = optional</code>
<code>commonname = supplied</code>
<code>emailaddress = optional </code>
<b>2</b> <b>生成私鑰</b> <b>key</b> <b>檔案</b><b> </b>
<code>$ cd /root/ca</code>
<code>$ sudo openssl genrsa -out</code><code>private</code><code>/ca.key</code>
<code>輸出</code>
<code>generating rsa</code><code>private</code> <code>key,</code><code>512</code> <code>bit</code><code>long</code> <code>modulus</code>
<code>..++++++++++++</code>
<code>.++++++++++++</code>
<code>e is</code><code>65537</code> <code>(</code><code>0x10001</code><code>)</code>
private 目錄下有 ca.key 檔案生成。
注:openssl 預設生成 512 位的。一般是用 2048 位的。
<b>3</b> <b>生成證書請求</b> <b>csr</b> <b>檔案</b>
<code>$ sudo openssl req -</code><code>new</code> <code>-key</code><code>private</code><code>/ca.key -out</code><code>private</code><code>/ca.csr</code>
提示輸入 country name,輸入 cn 并回車後:
提示輸入 state or province name (full name),輸入 zhejiang并回車後:
提示輸入 locality name,輸入 hangzhou并回車後:
提示輸入 organization name,輸入 aliyun并回車後:
提示輸入 organizational unit name,輸入 dev 并回車後:
提示輸入 common name,如果沒有域名的話,輸入 xxx.xxx.cn 并回車後:
提示輸入 email address,輸入 [email protected] 并回車後:
提示輸入 a challenge password,這個是根證書密碼。輸入 123456 并回車後:
private 目錄下有 ca.csr 檔案生成。
<b>4</b> <b>生成憑證</b> <b>crt</b> <b>檔案</b>
<code>$ sudo openssl x509 -req -days</code><code>365</code> <code>-in</code><code>private</code><code>/ca.csr -signkey</code><code>private</code><code>/ca.key -out</code><code>private</code><code>/ca.crt</code>
控制台輸出
private 目錄下有 ca.crt 檔案生成。
<b>5</b> <b>為我們的</b> <b>key</b> <b>設定起始序列号</b>
<code>$ sudo echo face > serial</code>
可以是任意四個字元
<b>6</b> <b>建立</b> <b>ca</b> <b>鍵庫</b>
<code>$ sudo touch index.txt</code>
<b>7</b> <b>為</b> <b>"</b><b>使用者證書</b><b>"</b> <b>的移除建立一個證書撤銷清單</b>
<code>$ sudo openssl ca -gencrl -out /root/ca/</code><code>private</code><code>/ca.crl -crldays</code><code>7</code> <code>-config</code><code>"/root/ca/conf/openssl.conf"</code>
輸出
<code>using configuration from /root/ca/conf/openssl.conf</code>
private 目錄下有 ca.crl 檔案生成。
<code>$ sudo mkdir users</code>
位置 /root/ca/users。
<code>$ sudo openssl genrsa -des3 -out /root/ca/users/client.key</code><code>1024</code>
要求輸入 pass phrase,這個是目前 key 的密碼,以防止本密鑰洩漏後被人盜用。兩次輸入同一個密碼(比如我這裡輸入 123456),users 目錄下有 client.key 檔案生成。
<code>$ sudo openssl req -</code><code>new</code> <code>-key /root/ca/users/client.key -out /root/ca/users/client.csr</code>
提示輸入 pass phrase,即 client.key 的密碼。将 3.2 步儲存的 pass phrase 輸入後并回車:
要求你輸入和 2.3 步一樣的那些問題。輸入的内容要求完全一緻。但 a challenge password 是用戶端證書密碼(請注意将它和 client.key 的密碼區分開,這邊設定密碼為test),可以與伺服器端證書或者根證書密碼一緻:
users 目錄下有 client.csr 檔案生成。
<code>$ sudo openssl ca -in /root/ca/users/client.csr -cert /root/ca/</code><code>private</code><code>/ca.crt -keyfile /root/ca/</code><code>private</code><code>/ca.key -out /root/ca/users/client.crt -config</code><code>"/root/ca/conf/openssl.conf"</code>
輸出
兩次都輸入 y,users 目錄下有 client.crt 檔案生成。
<code>$ sudo openssl pkcs12 -export -clcerts -in /root/ca/users/client.crt -inkey /root/ca/users/client.key -out /root/ca/users/client.p12</code>
要求輸入 client.key 的 pass phrase,輸入 2.3.2 步輸入的 pass phrase 并回車後:
要求輸入 export password,這個是用戶端證書的保護密碼(其作用類似于 3.3 儲存的密碼),在用戶端安裝證書的時候需要輸入這個密碼。我是輸入client。
users 目錄下有 client.p12 檔案生成。
此處上傳的為向證書服務商申請的伺服器證書。
相關證書的faq
這裡需要配置的内容:
ca證書上傳,即上傳上述描述生成的ca根證書,即“2 建立一個新的 ca 證書”描述的内容。
用戶端證書,是需要導入浏覽器中,即“3 用戶端證書的生成”描述的内容。
測試效果:
1、雙向認證,但是沒有導入用戶端證書,通路效果如下圖。
2、用戶端證書導入過程,在此省略。
主要過程為:
下載下傳用戶端證書-》輕按兩下運作-》輸入證書密碼-》選擇導入證書存儲位置-》完成。
重新開機浏覽器測試。
3、雙向認證,導入用戶端證書,通路效果如下圖。