我想使用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:
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