certificat de confiance entrées ne sont pas protégés par mot de passe de Printemps SAML
J'ai généré testIdp.cer fichier en le copiant 509 entrée de l'IDP, je suis la planification pour vous connecter. Puis j'ai créé JKS fichier en exécutant la commande suivante
keytool -importcert -alias adfssigning -keystore C:\Users\user\Desktop\samlKeystore.jks -file C:\Users\user\Desktop\testIdp.cer
Lors de l'exécution, il a demandé d'entrer un mot de passe pour que je leur ai donné un mot de passe. Pour la question "faire Confiance à ce certificat? [non]:" j'ai donné "y" comme entrée. Le Message a été "Certificat a été ajouté à keystore".
Puis j'ai configuré les détails suivants securityContext.xml
<bean id="keyManager" class="org.springframework.security.saml.key.JKSKeyManager">
<constructor-arg value="classpath:security/samlKeystore.jks"/>
<constructor-arg type="java.lang.String" value="mypassword"/>
<constructor-arg>
<map>
<entry key="adfssigning" value="mypassword"/>
</map>
</constructor-arg>
<constructor-arg type="java.lang.String" value="adfssigning"/>
</bean>
<bean class="org.springframework.security.saml.metadata.ExtendedMetadata">
<property name="alias" value="adfssigning" />
<property name="signingKey" value="adfssigning"/>
</bean>
Mais quand je lance l'application, j'ai le deux exceptions lorsque le serveur est le démarrage et lorsque je charge la page d'accueil de l'application. Quelqu'un peut-il me faire savoir si je suis absent quelque chose d'autre.
Cette exception se produit lorsque je démarre le serveur
Caused by: org.opensaml.saml2.metadata.provider.FilterException: Signature trust establishment failed for metadata entry
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.verifySignature(SignatureValidationFilter.java:327)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.processEntityGroup(SignatureValidationFilter.java:240)
at org.opensaml.saml2.metadata.provider.SignatureValidationFilter.doFilter(SignatureValidationFilter.java:158)
at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.filterMetadata(AbstractMetadataProvider.java:493)
at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.processNonExpiredMetadata(AbstractReloadingMetadataProvider.java:395)
Cette exception se produit lorsque je lance la page d'accueil de mon application
java.lang.UnsupportedOperationException: trusted certificate entries are not password-protected
at java.security.KeyStoreSpi.engineGetEntry(Unknown Source)
at java.security.KeyStore.getEntry(Unknown Source)
at org.opensaml.xml.security.credential.KeyStoreCredentialResolver.resolveFromSource(KeyStoreCredentialResolver.java:132)
OriginalL'auteur SM KUMAR | 2014-10-02
Vous devez vous connecter pour publier un commentaire.
Votre
.cer
certificat ne contient qu'une clé publique, vous ne devez pas définir<entry key="adfssigning" value="mypassword"/>
pour les clés publiques; il ne peut être utilisé que pour celles du secteur privé. Simplement prendre leadfssigning
entrée et assurez-vous d'inclure une clé privée au lieu - tout comme dans le Printemps SAML exemple d'application.La SAML keystore peut contenir deux types de base de touches - public et privé (en plus de leurs certificats). Chaque touche a un alias qui est utilisé pour la désigner. Le fichier de clés en lui-même peut être protégé par un mot de passe (fourni dans le deuxième paramètre du constructeur), plus de la clé privée peut également être protégé par un mot de passe supplémentaire (elles sont décrites dans le troisième paramètre du constructeur de la carte de alias->mot de passe). Les clés publiques de laquelle vous importez le fichier de clés (comme vous l'avez fait avec la commande ci-dessus) ne doit pas être défini dans cette carte. Ils seront automatiquement disponibles après avoir été importées sans des déclarations supplémentaires. Pour le Printemps SAML de travail, le fichier de clés doit contenir au moins une clé privée (l'exemple d'application contient la clé privée avec alias apollo) et son alias doit être fournie dans le troisième paramètre du constructeur.
Votre exemple ci-dessus échoue, parce que vous avez importé une clé publique, mais de l'inclure dans la carte qui peut être utilisée uniquement pour les clés privées.
Voulez-vous dire que nalle123 mappé à l'argument 2 et 3 du constructeur au printemps SAML exemple d'application correspondent à la même clé privée? Selon les documents argument 2 correspond au mot de passe du fichier de magasin de clés. Au printemps saml exemple d'application, je crois que c'est juste une coïncidence que le mot de passe du fichier de magasin de clés et la clé privée sont les mêmes. Comment puis-je créer JKS? J'ai actuellement seul le certificat public qui est ajoutée dans une .fichier cer et je suis en utilisant la commande keytool -importcert -alias adfssigning -keystore samlKeystore.jks -fichier testIdp.cer
J'ai mis à jour la réponse avec des explications supplémentaires. Pour plus de détails sur la façon de créer JKS et importer des clés, veuillez consulter le Printemps SAML manuel ou la documentation de Java.
J'ai appelé le Printemps SAML manuel. Mais je suis toujours confronté à des problèmes avec la clé privée. J'ai créé un fichier JKS avec la commande comme indiqué dans le manuel qui est comme suit
keytool -genkeypair -alias some-alias -keypass changeit -keystore samlKeystore.jks
Quel genre de questions vous êtes face des exceptions, des erreurs - où avez-vous publié?
OriginalL'auteur Vladimír Schäfer
Vladimir répondu correctement à la question pourquoi l'erreur se produit.
Dans ma réponse, je veux montrer comment vous pouvez importer un certificat dans le keystore de résoudre ce problème:
Vous devez importer le certificat et une clé privée, qui ne pouvait pas être fait directement par keytool.
Détaillé décrit la solution se trouve ici: https://stackoverflow.com/a/8224863/1909531
Voici un extrait:
OriginalL'auteur Matthias M
Cette erreur se produit également lorsque vous ne disposez pas d'une clé privée dans votre fichier de clés. SAML utilise la clé privée pour générer le fournisseur de Service de méta-données utilisées pour communiquer avec le pci.
Il suffit d'ajouter un à la Keystore comme ceci: keytool -genkey -v -keystore some_key_store.jks -alias some_alias -keyalg RSA -keysize 2048 -validité 36500
Remplissez les questions et de définir la validité d'un certain nombre de jours. (Dans mon exemple c'est valable pour les 100 ans)
N'oubliez pas d'ajouter le certificat public de DÉPLACÉS. Alors vous devriez être prêt à aller.
OriginalL'auteur Jakob Hemicke Greve