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