2012-09-27 20 views
5

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 

Odpowiedz

5

Problem polegał na tym, że certyfikaty główne i pośrednie nie zostały stworzone w odcinkach CA.

Aby utworzyć je jako certyfikatów CA, dodałem

-extfile GenerateCertificate.cfg -extensions v3_ca 

do ich tworzenia skryptów, i dodał GenerateCertificate.cfg złożyć do moich katalogów pracy (które zawierały pliki wsadowe tworzenie cert).

Wprowadziłem mój oryginalny wpis, aby odzwierciedlić te zmiany.

Powiązane problemy