2012-09-27 281 views
5

我想使用SSL客戶端證書來認證連接到tomcat6/7的用戶。我已經正確配置了tomcat,並且使用在我給tomcat的truststore中的證書籤名的證書正在從IE和Firefox成功驗證身份。鏈式客戶端證書

我還想鏈客戶端證書,因爲我想讓客戶有能力管理自己的用戶。我可以通過向客戶發佈一箇中間管理CA證書來完成這項工作,他們將使用它來簽署額外的用戶證書。我需要用戶的瀏覽器發送用戶證書,並與管理CA(由我的根證書籤名)進行鏈接以進行身份​​驗證。

我使用的是openssl,並且我創建了一個根CA和一箇中間CA,並且我使用了中間CA來簽署葉證書。我已將所有三個證書轉換爲pkcs12和pem,並使用keytool將根證書導入到tomcat的信任庫中。 openssl -verify將根據中間證書驗證葉pkcs12(以及針對根的中間驗證)。但我無法獲得葉證書(pkcs12)來驗證根證書(pkcs12)。我也無法讓IE或Firefox使用葉證書進行身份驗證。 IE會提示我輸入證書,但是無法驗證(沒有提及tomcat日誌中的連接或失敗)。 Firefox不會提示輸入葉證書;它只是無法驗證。

這裏是我嘗試使用OpenSSL的驗證對根葉:

openssl verify -CAfile ..\root\Root.pem Leaf.pem 

下面是我使用生成三個證的腳本:
root.bat:

​​3210

intermediate.bat:

set name=Intermediate 
set password=dummypassword 
set caDir=../root 
set caName=Root 
set caPassword=dummypassword 
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048 
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.crt -out %name%.pkcs12 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%password% 

葉.BAT:

set name=Leaf 
set password=dummypassword 
set caDir=../intermediate 
set caName=Intermediate 
set caPassword=dummypassword 
openssl genrsa -des3 -passout pass:%password% -out %name%.key 2048 
openssl req -new -key %name%.key -passin pass:%password% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -CA %caDir%/%caName%.crt -CAkey %caDir%/%caName%.key -passin pass:%caPassword% -set_serial 1 -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%password% -passout pass:%password% -chain -CAfile %caDir%/%caName%.pem -out %name%.pkcs12 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%password% 

GenerateCertificate.cfg:

[ v3_ca ] 
subjectKeyIdentifier=hash 
authorityKeyIdentifier=keyid:always,issuer 
basicConstraints = CA:true,pathlen:3 

回答

5

的問題是,根和中間證書沒有如CA證書創建。

其創建爲CA證書,我說

-extfile GenerateCertificate.cfg -extensions v3_ca 

自己創建腳本,並添加了GenerateCertificate.cfg文件,以(其中包含的證書創建批處理文件)我的工作目錄。

我編輯了我的原始文章以反映這些更改。