2012-09-27 34 views
5

Tôi muốn sử dụng chứng chỉ ứng dụng khách SSL để xác thực người dùng đang kết nối với tomcat6/7. Tôi đã có cấu hình tomcat đúng cách và các chứng chỉ tôi ký với cert trong truststore mà tôi đã cung cấp cho tomcat đang xác thực thành công từ cả IE và Firefox.Chứng chỉ khách hàng bị xích

Tôi cũng muốn chuỗi chứng chỉ ứng dụng khách, bởi vì tôi muốn mang đến cho khách hàng khả năng quản lý người dùng của riêng họ. Tôi có thể thực hiện việc này bằng cách cấp cho khách hàng chứng chỉ CA quản lý lặp lại mà họ sẽ sử dụng để ký thêm các chứng chỉ người dùng. Tôi sẽ cần trình duyệt của người dùng gửi chứng chỉ người dùng, bị xích với CA quản lý (được ký bởi chứng chỉ gốc của tôi) để xác thực.

Tôi đang sử dụng openssl và tôi đã tạo CA gốc và CA trung gian và tôi đã sử dụng CA trung gian để ký giấy chứng nhận lá. Tôi đã chuyển đổi tất cả ba chứng chỉ sang pkcs12 và pem và sử dụng keytool để nhập chứng chỉ gốc vào một truststore cho tomcat. openssl –verify sẽ kiểm tra pkcs12 lá đối với chứng chỉ trung gian (và trung gian xác minh với gốc). Nhưng tôi không thể nhận được chứng chỉ lá (pkcs12) để xác minh dựa vào chứng chỉ gốc (pkcs12). Tôi cũng không thể nhận được IE hoặc Firefox để xác thực bằng cách sử dụng chứng chỉ lá. IE sẽ nhắc tôi về chứng chỉ nhưng không xác thực được (không có đề cập đến kết nối hoặc lỗi trong nhật ký của tomcat). Firefox không nhắc chứng chỉ lá; nó chỉ đơn giản là không xác thực.

Dưới đây là cách tôi cố gắng xác minh các lá so với người chủ sử dụng openssl:

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

Dưới đây là kịch bản tôi đang sử dụng để tạo ra ba giấy chứng nhận:
root.bat:

set name=Root 
set keyPassword=dummypassword 
set trustPassword=dummypassword 
openssl genrsa -des3 -passout pass:%keyPassword% -out %name%.key 4096 
openssl req -new -key %name%.key -passin pass:%keyPassword% -out %name%.csr -subj "/C=US/ST=Chaos/L=TimeNSpace/O=None/CN=%name%" 
openssl x509 -req -days 3650 -in %name%.csr -signkey %name%.key -passin pass:%keyPassword% -extfile GenerateCertificate.cfg -extensions v3_ca -out %name%.crt 
openssl pkcs12 -export -in %name%.crt -inkey %name%.key -passin pass:%keyPassword% -passout pass:%keyPassword% -out %name%.pkcs12 
keytool -noprompt -import -file %name%.crt -alias %name% -keystore %name%.truststore -deststorepass %trustPassword% 
keytool -list -v -keystore %name%.truststore -storepass %trustPassword% > %name%.truststore.dump.txt 
keytool -exportcert -alias %name% -keystore %name%.truststore -storetype jks -storepass %trustPassword% -rfc -file %name%.truststore.pem 
openssl pkcs12 -in %name%.pkcs12  -out %name%.pem  -nodes -passin pass:%keyPassword% 

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% 

lá .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 

Trả lời

5

Vấn đề là các chứng chỉ gốc và trung cấp không được tạo ra như là chứng chỉ CA.

Để tạo chúng như chứng chỉ CA, tôi đã thêm

-extfile GenerateCertificate.cfg -extensions v3_ca 

để kịch bản sáng tạo của họ, và thêm file GenerateCertificate.cfg vào thư mục làm việc của tôi (trong đó có các tập tin batch tạo cert).

Tôi đã chỉnh sửa bài đăng gốc của mình để phản ánh những thay đổi này.

Các vấn đề liên quan