Chciałbym użyć certyfikatów klienta SSL do uwierzytelnienia użytkowników łączących się z tomcat6/7. Mam poprawnie skonfigurowany tomcat, a certyfikaty podpisane za pomocą certyfikatu w magazynie zaufanych certyfikatów, które przekazałem tomcat, pomyślnie uwierzytelniają się zarówno z IE, jak i Firefox.Powiązane certyfikaty klienta
Chciałbym również połączyć certyfikaty klienta, ponieważ chcę dać klientom możliwość zarządzania własnymi użytkownikami. Mógłbym to osiągnąć, wydając klientowi certyfikat pośredniego zarządzania CA, który posłużyłby do podpisania dodatkowych certyfikatów użytkownika. Potrzebowałbym przeglądarki użytkownika do wysłania certyfikatu użytkownika, połączonego z ośrodkiem zarządzania (podpisanym przez mój certyfikat główny) w celu uwierzytelnienia.
Używam openssl, utworzyłem główny urząd certyfikacji i pośredni urząd certyfikacji, a do podpisania certyfikatu liść użyłem pośredniego urzędu certyfikacji. Wszystkie trzy certyfikaty zostały przekonwertowane na pkcs12 i pem, a następnie użyłem keytool do zaimportowania certyfikatu głównego do magazynu zaufanych certyfikatów dla tomcat. openssl -verify zweryfikuje liść pkcs12 na certyfikacie pośrednim (a pośredni sprawdza na root). Ale nie mogę uzyskać certyfikatu listowego (pkcs12) do weryfikacji na podstawie certyfikatu głównego (pkcs12). Nie mogę też uzyskać uwierzytelnienia IE lub Firefoxa przy użyciu certyfikatu. IE poprosi mnie o certyfikat, ale nie uwierzytelni się (nie ma wzmianki o połączeniu lub niepowodzeniu w logach tomcat). Firefox nie pyta o certyfikat listowy; po prostu nie uwierzytelnia się.
Oto jak próbuję zweryfikować liści na korzeniu użyciu OpenSSL:
openssl verify -CAfile ..\root\Root.pem Leaf.pem
Oto skrypt używam do generowania trzy certyfikaty:
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%
liść 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