web-dev-qa-db-fra.com

Débarrassez-vous de l'éditeur «inconnu» de l'avertissement de sécurité d'applet

J'essaie de signe un appletde sorte que le éditeurn'apparaisse pas comme " INCONNU ":

Applet security warning showing an "UNKNOWN" publisher

Je travaille pour une organisation et nous avons notre propre autorité de certification, chaîne de certificationest la suivante: ORG racine CA> ORG Autorité de certification de confiance> Yann39 (ME: D)

J'ai demandé un certificat et ils m'ont fourni un lien pour l'obtenir dans le navigateur. Ensuite, je l'ai exporté (de Firefox) pour obtenir le fichier PKCS n ° 12 que j'ai nommé mystore.p12.

Ensuite, j'ai fait ce qui suit à signe mon applet:

/* TO KNOW THE ALIAS */
c:\testrep>keytool -list -storetype pkcs12 -keystore mystore.p12
Enter keystore password:  ********

Keystore type: pkcs12
Keystore provider: SunJSSE

Your keystore contains 1 entry

id de yann39, Oct 24, 2012, keyEntry,
Certificate fingerprint (MD5): D7:E3:83:1D:C1:40:68:72:5F:A8:6F:AC:3A:EA:DD:47

/* CREATE FAKE CLASS FILE AND BUILD A JAR */
c:\testrep>echo test > test.class
c:\testrep>C:\Oracle\dev10gr2\jdk\bin\jar cf0 test_applet.jar test.class

/* SIGN THE JAR */
c:\testrep>C:\Oracle\dev10gr2\jdk\bin\jarsigner -verbose -storetype pkcs12 -keystore mystore.p12 test_applet.jar "id de yann39"
Enter Passphrase for keystore: ********
 updating: META-INF/MANIFEST.MF
   adding: META-INF/ID_DE_YA.SF
   adding: META-INF/ID_DE_YA.RSA
  signing: test.class

/* VERIFY THE SIGNATURE */
c:\testrep>C:\Oracle\dev10gr2\jdk\bin\jarsigner -verify -verbose -certs test_applet.jar

         132 Wed Oct 24 17:49:52 CEST 2012 META-INF/MANIFEST.MF
         185 Wed Oct 24 17:49:52 CEST 2012 META-INF/ID_DE_YA.SF
        4801 Wed Oct 24 17:49:52 CEST 2012 META-INF/ID_DE_YA.RSA
           0 Wed Oct 24 17:48:36 CEST 2012 META-INF/
sm         0 Wed Oct 24 17:47:46 CEST 2012 test.class

      X.509, CN=Yann39, CN=794324, CN=myname, OU=Users, OU=Organic Units,
DC=myorg, DC=ch
      X.509, CN=ORG Trusted Certification Authority, DC=myorg, DC=ch
      X.509, CN=ORG Root CA, DC=myorg, DC=ch


  s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

c:\testrep>

Ensuite, je chargez l'appliquéedans mon application en utilisant les éléments suivants:

<object id="mytestapplet" width="0" height="0" style="position:absolute" type="application/x-Java-applet">
<param name="archive" value="https://myhost.ch/rep/test_applet.jar">
<param name="code" value="test">
<param name="scriptable" value="true">
<param name="mayscript" value="no">
</object>

J'ai lu des messages comme celui-ci: Comment signer Java applet avec fichier .pfx? et il semble que je devrais obtenirsmi lors de la vérification du fichier signé du pot, non seulement sm Cela signifie que le certificat n'a pas été trouvé dans le magasin de clés.

Donc, Je pensais que la chaîne de certificats n'était pas complète, mais lors de la commande suivante, j'ai vu que ce n'était pas le cas:

c:\testrep>keytool -list -v -storetype pkcs12 -keystore mystore.p12
Enter keystore password:  ********

Keystore type: pkcs12
Keystore provider: SunJSSE

Your keystore contains 1 entry

Alias name: id  de yann39
Creation date: Oct 24, 2012
Entry type: keyEntry
Certificate chain length: 3
Certificate[1]:
Owner: CN=Yann39, CN=794324, CN=myname, OU=Users, OU=Organic Units,
    DC=myorg, DC=ch
Issuer: CN=ORG Trusted Certification Authority, DC=myorg, DC=ch
Serial number: 12d21eb200200000a02b
Valid from: Mon Jun 25 14:16:00 CEST 2011 until: Wed Jun 24 14:16:00 CEST 2013
Certificate fingerprints:
         MD5:  D7:E3:83:1D:C1:41:78:72:5F:A8:6D:BD:3A:ED:DD:48
         SHA1: 24:31:1D:25:02:98:0D:F8:28:6A:F1:0E:E8:BB:04:7E:51:E2:E9:66
Certificate[2]:
Owner: CN=ORG Trusted Certification Authority, DC=myorg, DC=ch
Issuer: CN=ORG Root CA, DC=myorg, DC=ch
Serial number: 601fab4c000000000003
Valid from: Tue Oct 02 11:36:53 CEST 2006 until: Mon Oct 02 11:47:53 CEST 2016
Certificate fingerprints:
         MD5:  51:A1:EA:33:21:2C:71:60:A1:6F:F1:22:92:A8:51:8D
         SHA1: 66:CD:70:13:27:68:F3:C2:08:F3:BE:5F:BF:D4:17:BD:85:9D:10:65
Certificate[3]:
Owner: CN=ORG Root CA, DC=myorg, DC=ch
Issuer: CN=ORG Root CA, DC=myorg, DC=ch
Serial number: 7dc0d089138d1d804b2e68e21b947412
Valid from: Tue Oct 02 10:55:19 CEST 2006 until: Sat Oct 02 11:01:47 CEST 2026
Certificate fingerprints:
         MD5:  A2:CE:DC:7D:F5:60:D7:2C:5E:B5:29:74:9D:51:F9:49
         SHA1: DA:D8:7F:63:95:90:A2:E4:D4:1D:B9:48:FD:F4:C3:5C:FC:2B:B6:A3


*******************************************
*******************************************



c:\testrep>

La chaîne semble bonne.

Mais je toujoursobtenez le Security Avertissementavec un "Inconnu" Publisher. Pourquoi?


EDIT 25-OCT-OCT-2012

J'ai oublié de dire que Ça fonctionne avec Internet Explorer("Signature a été vérifié" et que l'éditeur est "Yann39"), n'utilise pas Chrome ou Firefox.

J'ai essayé d'utiliser un auto-signécertificat:

keytool -genkey -alias myalias -storetype PKCS12 -keystore mykeystore.p12 -dname "cn=Yann39, ou=UN, o=ORG, st=Geneva, c=CH"
keytool -list -v -storetype pkcs12 -keystore mykeystore.p12
echo test > test.class
C:\Oracle\dev10gr2\jdk\bin\jar cf0 myapplet.jar test.class
C:\Oracle\dev10gr2\jdk\bin\jarsigner -verbose -storetype pkcs12 -keystore mykeystore.p12 myapplet.jar "myalias"
C:\Oracle\dev10gr2\jdk\bin\jarsigner -verify -verbose -certs myapplet.jar

Cela ne fonctionne pas non plus dans IE ni dans Firefox ou Chrome, normal.

J'ai essayé d'ajouter les 2 certificats de confiance de mon organisation mais il a échoué:

keytool -import -alias "myalias_root" -file ORGRooTCA.crt -storetype pkcs12 -keystore mykeystore.p12
keytool -import -alias "myalias_auth" -file ORGTrustedCertificationAuthority.crt -storetype pkcs12 -keystore mykeystore.p12

avec l'erreur:

keytool error: Java.security.KeyStoreException: TrustedCertEntry not supported

Je ne comprends toujours pas pourquoi il dit que le certificat n'a pas été trouvé dans le magasin de clés (sm) lors de la vérification de la signature.


EDIT 02-NOV-2012

J'ai enfin reçu une réponse de mon autorité de certification. À mesure que les certificats de signature de code sont fournis uniquement pour TEST (non officiellement pris en charge par notre organisation), ils ne fournissent aucune aide et ils ont fermé mon billet ...

Les 2 certificats ORG Root Caet ORG Autorité de certification fi fiduciéefont confiance dans les 3 navigateurs (c.-à-d. Firefox, Chrome). Lors de l'exécution de mon applet, je reçois toujours le résultat attendu dans IE:

Mais pas dans Firefox et Chrome:

Une autre chose étrange est que, comme vous le voyez IE est référençant comme "nom" l'ID de la balise <object> étiquette utilisée dans le HTML ( AppletTest ), tandis que Firefox et Chrome Référencez le nom de la classe principale ( test ).

Ce que je pense, c'est que c'est la même chose à propos de Publisher, IE regarde le CN rdn ( yann39 ) tandis que Firefox et Chrome regardent le O RDN et ne peut pas en trouver un tel qu'il n'est pas défini dans mon certificat.

Si quelqu'un a plus d'informations sur la façon dont les navigateurs vérifient les certificats, veuillez partager.

Merci.

13
Yann39

Si vous avez votre propre CA et que vous avez des applets de certificats avec des certificats émis par cette CA, vous devez évidemment ajouter que le certificat de CA à la liste des autorités de certification de confiance.

Lorsque vous courez à l'intérieur, le Java Plugin semble pouvoir utiliser la liste système de CA, vous devez donc simplement ajouter votre certificat CA au stockage du certificat système (assurez-vous de choisir manuellement le Destination de certificats en tant que CA de confiance pendant l'importation).

Lors de la course à l'intérieur Chrome ou firefox, le Java plugin pour une raison quelconque n'utilise pas le stockage de certificats système, mais seul son propre stockage de certificat distinct. Vous obtiendrez le Avertissement de sécurité "insécurité" avec éditeur "inconnu" lors de l'exécution d'applet dans ces navigateurs si le certificat de CA n'est pas présent dans Java stockage du certificat de plugin, que ce soit dans la "CA de confiance". Stockage de certificats système.

Pour ajouter un certificat à Java Plugin Stockage:

  • ouvrir Java Panneau de commande
  • sélectionnez l'onglet "Sécurité"
  • cliquez sur "Gérer les certificats ..." "
  • sélectionnez l'option "Signer CA" dans la liste déroulante "Type de certificat".
  • importer votre certificat de CA

La prochaine fois que vous utilisez Chrome ou Firefox pour exécuter votre applet, vous aurez un avertissement de sécurité "sécurisé" normal avec la possibilité de faire confiance à cette applet pour toujours.

10
Oleg Estekhin

Vous devez ajouter des certificats de CA (jusqu'à la CA racine) à votre fichier P12 avant de vous connecter.

2
Antonio

Le même message "inconnu" étrange est apparu lorsque j'ai changé mon certificat de signature. J'ai importé le certificat de mon centre de clés de signature en CaCerts (de sorte que mon pot auto-signé soit accepté), mais le Java cache a tenu l'ancien Jarfile. Puis lors du démarrage de l'applet "Ancien" avec le "Nouveau" certificat, un message similaire à celui ci-dessus est apparu.

Solution: Effacer le Java cache (via Java Panneau de configuration ou Javaws -uninstall).

Ceci juste au cas où quelqu'un (comme moi-même) trébuche sur ce fil lors de la recherche de ce message d'erreur.

2
smakks

J'ai essayé d'ajouter les 2 certificats de confiance de mon organisation, mais il a échoué:

EMM ... tout semble tout à fait flou parce que vous démo le processus de signature depuis les certificats importés uniquement ...

J'ai essayé d'utiliser un certificat auto-signé, il ne fonctionne pas non plus dans IE ni dans Firefox ou Chrome, normal. J'ai essayé d'ajouter les 2 certificats de confiance de mon organisation, mais il a échoué:

Bien sûr, il a échoué. Parce que vous ne pouvez pas importer des certs pour obtenir une chaîne pour les clés non originales. Et revenir à votre cas de test ...

Tout ce que je peux voir dans votre cas de test, des choses comme:

  • A) vous gène peut-être myalias ou peut-être myalias_root ​​et myalias_auth clé (s) - donnez plus de détails ici
  • B) vous essayez d'importer Orgootca et orgtrustedCertificationAuthority
  • C) vous essayez de signer un pot de test

À l'étape B, essayez d'importer 2 certs. Donc je dois demander

  • Étaient les deux certs générés en utilisant myalias_root ​​et
    [.____] myalias_auth CSR (s)?

S'ils ne l'étaient pas, je suppose que vous venez de sauter quelques étapes comme suit:

  • A) gen myalias_root ​​et myalias_auth clé (s)
  • B) Gen CSR de myalias_root ​​_ racine et myalias_auth
  • C) GEN CERTS Orgootca et OrgtrustedCertificationAuthority en utilisant myalias_root ​​et
    [.____] myalias_auth CSR (s)
  • D) Importer les certs comme Orgootca et OrgtrustedCertificationAuthority pour obtenir la chaîne
  • E) essayer de signer un pot de test

Et encore une fois ...

J'ai essayé d'ajouter les 2 certificats de confiance de mon organisation, mais il a échoué:

En conséquence, je peux vous conseiller

  • A) Obtenez non seulement des certs de votre organisation, mais également de son keyStore Keys Les certs ont été générés de
  • B) OU GEN Vos propres clés et vos propres certs en suivant les étapes ABCDE mentionnées précédemment :)

J'ai demandé un certificat et ils m'ont fourni un lien pour l'obtenir dans le navigateur. Puis je l'ai exporté (de Firefox) pour obtenir le fichier PKCS n ° 12 que j'ai nommé mystore.p12.

Vous l'importaitez manuellement et vous l'avez alors exporté comme décrit ici ?

Ok ... c'est assez intéressant. Si vous êtes toujours sûr de toutes les choses de votre PFX Droite: S toujours je re-joue à votre coqigneur à l'aide de la démo. Alors vous signer le test_applet.jar comme

/* SIGN THE JAR */
c:\testrep>C:\Oracle\dev10gr2\jdk\bin\jarsigner -verbose -storetype pkcs12 -keystore mystore.p12 test_applet.jar "id de yann39"
Enter Passphrase for keystore: ********
 updating: META-INF/MANIFEST.MF
   adding: META-INF/ID_DE_YA.SF
   adding: META-INF/ID_DE_YA.RSA
  signing: test.class 

... c'est assez standard de la signature, mais je veux pointer un peu de détails ... Je ne peux pas voir où Jarsigner demande Vous devez entrer la clé privée "id de yann39" mot de passe =: S? Tout ce que je peux voir que vous entrez un mot de passe KeyStore uniquement ... L'étape est-elle ignorée dans votre version de copie-coller ou votre jarsigner ne vous demande pas vraiment de saisir le mot de passe clé?

En tant que procès, je vous recommande d'essayer de signer votre pot à l'aide de - Clouyps ARG AS (Voir exemple)

jarsigner -keystore C:\working\mystore -storepass myspass
      -keypass dukekeypasswd MyJarFile.jar duke

Pour plus de détails, voir Comment utiliser Jarsigner Docs ...


Je n'ai apporté aucune modification du certificat, alors oui, je suppose que c'est la clé privée originale? À propos de votre édition: Oui, je l'ai exporté comme décrit dans votre lien, mais j'ai utilisé "Sauvegarde tout", pas "Sauvegarde" seulement, sinon je ne reçois pas la chaîne de certificats entière dans mon fichier .P12. À propos de la signature du fichier .jar, je n'ai rien sauté, Jarsigner ne me demandez que le mot de passe de KeyStore. Je pense que le mot de passe KeyStore et le mot de passe privé sont les mêmes,

Si vous avez généré des clés dans votre clé de clés avec KeyTool, vous devez savoir que KeyStore a son mot de passe et que la ou les clés privées nouvellement générées devraient avoir son propre mot de passe; Donc, je suppose peut-être que quelque chose manquait ici: s Il serait intéressant de vous intéresser a) importez votre PFX sur IE et l'exportez avec IE comme décrit ici : depuis le "oui Exporter la clé privée "Instructions +" inclut tous les certificats de la voie de certification si possible "

P.s. S'il vous plaît commenter si cela était utile

1
user592704