Zimbra高級應用之-雙向證書認證(一)

 使用zimbra作爲企業郵件服務器的公司,可能會遇到這樣一種情況:使用用戶名+密碼的傳統認證方法,經常會發現有人惡意登錄用戶郵箱,採取暴力 破解,不斷嘗試登錄密碼。同時,簡單密碼組合很輕易被破解。從而在未經授權情況下登錄用戶郵箱。。。管理員可能會採取強制用戶使用複雜密碼,特殊字符,大 小寫字母,數字等排列組合。。。但這種密碼同時也加大了用戶的負擔,因爲他們要記很長,很複雜的密碼。。。

Zimbra提供了另一種方法可以解決這個問題,就是雙向證書認證【2-way SSL (mutual authentication) using X.509 certificates】。用戶只需拿着屬於自己的私鑰即可在不需要用戶名密碼的情況下,訪問自己的郵箱。認證方式由密碼認證,變成證書認證。

更多內容,請訪問 Darren博客

 

環境:
操作系統:Ubuntu 12.04_x64 LTS
Zimbra版本: zcs-8.0.0_GA_5434.UBUNTU12_64.20120907144631
域名:mail.imycloud.com

由於大部分操作我全部使用root用戶完成,所以很多zimbra提供的命令需要打絕對路徑。

加粗顯示的爲命令

斜體的爲系統提示符

正常顯示的爲顯示信息

一、zimbra安裝

請參考另一篇博文:

二、雙向證書認證設置:

創建一個目錄來存放證書文件
root@mail:/opt/zimbra# mkdir certs
root@mail:/opt/zimbra# cd certs/

 

1. 生成CA證書

a. 創建一個私鑰

root@mail:/opt/zimbra#/opt/zimbra/openssl/bin/openssl genrsa -out ca.key 2048

b. 創建一個證書請求

root@mail:/opt/zimbra/certs# /opt/zimbra/openssl/bin/openssl req -new -key ca.key -out ca.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) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:imycloud.com
Organizational Unit Name (eg, section) []:imycloud.com
Common Name (e.g. server FQDN or YOUR name) []:www.imycloud.com
Email Address []:[email protected]

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
root@mail:/opt/zimbra/certs#
c. 根據證書請求,創建自簽名證書
root@mail:/opt/zimbra/certs#/opt/zimbra/openssl/bin/openssl x509 -extfile /opt/zimbra/openssl/ssl/openssl.cnf -extensions v3_ca -req -days 365 -in ca.csr -out ca.crt -signkey ca.key
Signature ok
subject=/C=CN/ST=Shanghai/L=Shanghai/O=imycloud.com/OU=imycloud.com/CN=www.imycloud.com/[email protected]
Getting Private key

d. 驗證x509V3 CA證書:

root@mail:/opt/zimbra/certs# /opt/zimbra/openssl/bin/openssl x509 -in ca.crt -noout -text

……

X509v3 extensions:
X509v3 Subject Key Identifier:
73:C6:B6:51:BA:8A:F1:E9:1C:CE:51:C6:4F:A5:36:31:82:4F:1F:48
X509v3 Authority Key Identifier:
keyid:73:C6:B6:51:BA:8A:F1:E9:1C:CE:51:C6:4F:A5:36:31:82:4F:1F:48

X509v3 Basic Constraints:
CA:TRUE
……

2. 生成客戶端證書

a. 創建私鑰(我在這裏用admin用戶演示,如果你要爲n個帳號做認證,需要創建n個):

root@mail:/opt/zimbra/certs#/opt/zimbra/openssl/bin/openssl genrsa –out admin.key 2048

 

b. 創建證書請求:

注意:此步驟最重要的是填寫正確的用戶郵箱地址,此地址必須是zimbra用戶郵箱地址!
root@mail:/opt/zimbra/certs#/opt/zimbra/openssl/bin/openssl req -new -key admin.key -out admin.csr

Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:imycloud.com
Organizational Unit Name (eg, section) []:imycloud.com
Common Name (e.g. server FQDN or YOUR name) []:www.imycloud.com
Email Address []:[email protected] #注意該郵箱地址!必須填寫zimbra郵箱用戶地址。

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: #
An optional company name []:

c. 使用第一步創建的ca證書籤署用戶證書請求,並創建該用戶證書:

root@mail:/opt/zimbra/certs#/opt/zimbra/openssl/bin/openssl ca -in admin.csr -cert ca.crt -keyfile ca.key -out admin.crt -policy policy_anything
注意:
如果你看到如下報錯:
Using configuration from /opt/zimbra/openssl-1.0.0d/ssl/openssl.cnf
I am unable to access the ./demoCA/newcerts directory
./demoCA/newcerts: No such file or directory
請做以下操作:
root@mail:/opt/zimbra/certs#mkdir -p ./demoCA/newcerts
root@mail:/opt/zimbra/certs#cd demoCA
root@mail:/opt/zimbra/certs#echo “01″ > serial
root@mail:/opt/zimbra/certs#touch index.txt     #創建一個空的index.txt文件
root@mail:/opt/zimbra/certs#cd ..                                 #回到剛纔創建的存放證書的目錄

然後再次執行該命令:
root@mail:/opt/zimbra/certs#/opt/zimbra/openssl/bin/openssl ca -in admin.csr -cert ca.crt -keyfile ca.key -out admin.crt -policy policy_anything
Using configuration from /opt/zimbra/openssl-1.0.1c/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0×1)
Validity
Not Before: Oct 1 10:39:23 2012 GMT
Not After : Oct 1 10:39:23 2013 GMT
Subject:
countryName = CN
stateOrProvinceName = Shanghai
localityName = Shanghai
organizationName = imycloud.com
organizationalUnitName = imycloud.com
commonName = www.imycloud.com
emailAddress = [email protected]
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
D5:98:89:84:5A:F4:92:EB:49:1D:3C:72:72:37:B2:A9:A8:91:52:0C
X509v3 Authority Key Identifier:
keyid:73:C6:B6:51:BA:8A:F1:E9:1C:CE:51:C6:4F:A5:36:31:82:4F:1F:48

Certificate is to be certified until Oct 1 10:39:23 2013 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

此時certs目錄下應該有如下文件:
root@mail:/opt/zimbra/certs# ls
admin.crt admin.csr admin.key ca.crt ca.csr ca.key demoCA

3. 導入用戶證書至瀏覽器

我們以firefox爲例。
因爲一般我們使用crt格式的證書文件就可以了。如果你的瀏覽器要求的證書格式爲pkcs12格式,請使用如下命令生成pkcs12格式的證書:
root@mail:/opt/zimbra/certs#/opt/zimbra/openssl/bin/openssl pkcs12 -export -clcerts -in admin.crt -inkey admin.key -out admin.p12
Enter Export Password:            #這個導出密碼建議爲不同帳號設置不同密碼,在導入證書時會要求輸入該密碼。有密碼保護也有保障。
Verifying – Enter Export Password:
然後將生成的admin.crt或者admin.pk12文件拷貝到本地。並導入到瀏覽器中。
火狐的瀏覽器導入證書步驟爲:
點擊左上角火狐→選項→選項→高級→加密→查看證書→我的證書→導入→選擇pk12文件→點擊打開→點擊確定
此時在我的證書裏面,就會看到導入的證書信息

4. 導入簽署客戶端證書的CA證書到ZCS的密鑰庫

兩種方法:
a. root@mail:/opt/zimbra/certs# /opt/zimbra/bin/zmcertmgr addcacert ca.crt
b. root@mail:/opt/zimbra/certs# keytool -import -keystore /opt/zimbra/jetty/etc/keystore -alias myca -file ca.crt
筆者使用的的是第一種。

5. 配置zimbra 服務器請求客戶端證書

由於客戶端證書身份認證是利用ssl,所以要求訪問方式爲ssl。而且認證端口不能跟443衝突。筆者使用9443

a. 先確認登錄方式爲https:

root@mail:/opt/zimbra/certs# /opt/zimbra/bin/zmprov gs mail.imycloud.com zimbraMailMode
# name mail.imycloud.com
zimbraMailMode: https
如果不是https方式訪問,請使用如下命令修改:
root@mail:/opt/zimbra/certs# /opt/zimbra/bin/zmtlsctl https

b. 設置認證端口

root@mail:/opt/zimbra/certs# /opt/zimbra/bin/zmprov ms mail.imycloud.com zimbraMailSSLClientCertPort 9443

c. 客戶端認證有兩種模式;

WantClientAuth 和 NeedClientAuth

區別爲:
當使用WantClientAuth,服務器並不強制客戶端擁有證書,如果沒有證書,將使用用戶名/密碼的認證方式。
當使用NeedClientAuth,服務器強制要求客戶端必須有證書,如果沒有證書,連接將被服務器中斷。
用哪種模式,取決爲各位需求,筆者所在的公司要求使用證書認證,所以我選擇NeedClientAuth方式

使用如下命令看詳細信息:
root@mail:/opt/zimbra#/opt/zimbra/bin/zmprov desc -a zimbraMailSSLClientCertMode
設置認證方式爲NeedClientAuth:
root@mail:/opt/zimbra#/opt/zimbra/bin/zmprov ms mail.imycloud.com zimbraMailSSLClientCertMode NeedClientAuth

6. 重啓mailbox服務:

由於此命令只允許zimbra用戶執行,請先切換至zimbra用戶。
root@mail:/opt/zimbra# su zimbra
zimbra@mail:~$ zmmailboxdctl restart
Stopping mailboxd…done.
Starting mailboxd…done.

至此,雙向證書認證登錄基本配置完畢。

三、測試

ZWC登錄:

https://mail.imycloud.com:9443/certauth

Admin console登錄:

https://mail.imycloud.com:9443/certauth/admin

如果配置正確,打開頁面時,會先彈出來證書認證窗口,如果證書配置正確。然後將直接跳轉至用戶郵箱。如果沒有,請檢查配置。

 

小結:以上步驟僅僅實現了雙向證書的認證登錄,但是具體細節還需要再配置完善一下,請看第二篇博文。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章