Ho problemi a far funzionare una connessione SSL. Ho fatto molte ricerche sul web, ma mi manca ancora un po 'di comprensione sembra. Spero che puoi aiutarmi. Genero una catena di certificati di sviluppo: RootCA - > SubCA - > Server
Li ho generati in questo modo
openssl req -batch -x509 -config ${ROOTCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${ROOTCA_CERT} -outform PEM -days 7300
openssl req -batch -config ${SUBCA_CONFIG} -newkey rsa:2048 -sha1 -nodes -out ${SUBCA_CSR} -outform PEM
openssl ca -batch -config ${ROOTCA_CONFIG} -policy signing_policy -extensions signing_req_CA -out ${SUBCA_CERT} -infiles ${SUBCA_CSR}
Quindi aggiungo il certificato RootCA al mio trust store Java e il certificato client all'archivio chiavi. Questa è la prima cosa che mi imbarazza: il SubCA Cert ha le informazioni in chiaro che mi aspetto. La CA radice ha solo informazioni crittografiche (la parte tra BEGIN e CERTIFICATO DI FINE. È da verificare? Il mio SubCA Cert appare così, ho troncato la parte cripto:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=DE, O=Company, CN=Root CA 2016
Validity
Not Before: Oct 20 11:59:57 2016 GMT
Not After : Oct 18 11:59:57 2024 GMT
Subject: C=DE, O=Company, CN=SubCA 2016
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:ae:0b:94:36:76:7c:34:d8:37:61:44:5f:1c:68:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
43:2E:0E:EB:66:C6:2F:AC:1B:24:C7:95:48:92:95:6E:E3:E0:83:1E
X509v3 Authority Key Identifier:
keyid:19:6B:27:27:F8:9F:56:E3:07:E7:AB:51:1E:15:DC:F8:F1:96:D5:35
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage:
Digital Signature, Certificate Sign, CRL Sign
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl.url
Authority Information Access:
CA Issuers - URI:http://downloads.some.url
Quindi creo un certificato server (i nomi delle variabili lo chiamano client, poiché viene utilizzato per generare entrambi):
openssl req -batch -config ${CLIENT_CONFIG} -newkey rsa:2048 -sha256 -nodes -out ${CLIENT_CSR} -outform PEM -keyout $1.key
openssl ca -batch -config ${SUBCA_CONFIG} -policy signing_policy -extensions signing_req -out ${CLIENT_CERT} -infiles ${CLIENT_CSR}
Il certificato del server assomiglia a questo:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=DE, O=Company, CN=SubCA 2016
Validity
Not Before: Oct 20 12:18:18 2016 GMT
Not After : Oct 20 12:18:18 2018 GMT
Subject: C=DE, ST=Bayern, L=Mytown, O=Company, OU=OU, CN=My Server
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
53:C6:01:AB:E4:AA:C4:A4:BC:8B:2D:45:9C:92:40:5D:59:B7:AD:A0
X509v3 Authority Key Identifier:
keyid:43:2E:0E:EB:66:C6:2F:AC:1B:24:C7:95:48:92:95:6E:E3:E0:83:1E
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl.url.de/some.crl
Authority Information Access:
CA Issuers - URI:http://some.url.de/rootcacert2016.cert
X509v3 Extended Key Usage:
TLS Web Client Authentication
X509v3 Subject Alternative Name:
DNS:localhost, DNS:127.0.0.1, DNS:some.url.de
Signature Algorithm: sha256WithRSAEncryption
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Ora vorrei verificare il certificato generato. Questo fallisce con il messaggio
error 2 at 1 depth lookup:unable to get issuer certificate
Se verifica correttamente se concatenare file SubCA e CA in un singolo file. Anche questo è corretto? Mi aspettavo che il certificato fosse verificabile con ogni certificato?
E ora il mio problema: quando tento di connettermi al mio servizio, fornisce il suo certificato del server. L'ho controllato con wireshark, per sicurezza. Il client non riesce quindi a eseguire l'autenticazione con il messaggio
“unable to find valid certification path to requested target"
Ho esportato il certificato del server come token PKCS12 e l'ho importato nel mio keystore java. Im ha importato i certificati ca / subca nel mio truststore. Questo è presentato dal server come previsto. Quindi penso che ho incasinato la catena di certificati in qualche modo. Poiché i file concatenati di certficate funzionavano così bene con openssl, ho provato ad importarlo nel mio truststore. Questo porta ad avere solo il certificato subca, quindi immagino che ora funzioni. Quando li importa entrambi individualmente, l'elenco dei certificati va bene. Tuttavia, il percorso di certificazione in qualche modo non è corretto. Puoi darmi una mano? Mi sto un po 'frustrando ...
Aggiornamento: Questo è il certificato di root:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 13418448032209606381 (0xba37e7642ce496ed)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=DE, O=Company, CN=IDS Root CA 2016
Validity
Not Before: Oct 20 11:59:57 2016 GMT
Not After : Oct 15 11:59:57 2036 GMT
Subject: C=DE, O=Fraunhofer, CN=IDS Root CA 2016
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
...
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
19:6B:27:27:F8:9F:56:E3:07:E7:AB:51:1E:15:DC:F8:F1:96:D5:35
X509v3 Authority Key Identifier:
keyid:19:6B:27:27:F8:9F:56:E3:07:E7:AB:51:1E:15:DC:F8:F1:96:D5:35
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage:
Non Repudiation, Certificate Sign, CRL Sign
Signature Algorithm: sha1WithRSAEncryption
...
Questo è il mio file di configurazione per creare il certificato del server:
HOME = .
RANDFILE = $ENV::HOME/.rnd
####################################################################
[ req ]
default_bits = 2048
#default_keyfile = connector.key
distinguished_name = connector_distinguished_name
req_extensions = connector_req_extensions
string_mask = utf8only
####################################################################
[ connector_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = DE
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Bayern
localityName = Locality Name (eg, city)
localityName_default = Muenchen
organizationName = Organization Name (eg, company)
organizationName_default = Company
organizationalUnitName = Organizational Unit Name (department, division)
organizationalUnitName_default = OU
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = Test Server
emailAddress = Email Address
emailAddress_default = [email protected]
####################################################################
[ connector_req_extensions ]
subjectKeyIdentifier = hash
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment, nonRepudiation
extendedKeyUsage = clientAuth
#securityProfile = ASN1:UTF8:IDS Security Profile Specification
#subjectAltName = URI:UUID:%%DEVICE_UUID%%
subjectAltName = @alternate_names
[ alternate_names ]
DNS.1 = localhost
DNS.2 = 127.0.0.1
DNS.3 = some.url.com