todvora / eet-client

Client and library for #EET communication - http://www.etrzby.cz/ , written in Java
MIT License
48 stars 26 forks source link

java.lang.SecurityException: JCE cannot authenticate the provider BC #14

Closed radek252 closed 7 years ago

radek252 commented 7 years ago

Pouzil jsem Vaseho klienta pro EET. Na mem pocitaci vse funguje v poradku, jak spustenim z NetBeans, tak i samostatne jar. Pokud ale nahraji jak na jiny pocitac, objevi se tato vyjimka. Clienta eet-client mam ve svem maven projektu

    <dependency>
        <groupId>cz.tomasdvorak</groupId>
        <artifactId>eet-client</artifactId>
        <version>2.0.3</version>
    </dependency>

nekde jsem nasel, ze bouncycastle by mel mit provided, ale ve Vasem pom.xml to neni uvedeno.

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.55</version>
    <scope>provided</scope>
</dependency>

Projekt je Java8, jce_policy-8 jsem nakopiroval, ale s timhle si nevim rady. Dekuji za pomoc.

cz.tomasdvorak.eet.client.exceptions.InvalidKeystoreException: java.io.IOException: error constructing MAC: java.lang.SecurityException: JCE cannot authenticate the provider BC
at cz.tomasdvorak.eet.client.security.ClientKey.getKeyStore(ClientKey.java:93) at cz.tomasdvorak.eet.client.security.ClientKey.(ClientKey.java:51) at cz.tomasdvorak.eet.client.EETServiceFactory.getInstance(EETServiceFactory.java:24) at Main.sendEetRequestProduction(Main.java:73) at Main.lambda$main$1(Main.java:56) at spark.TemplateViewRouteImpl$1.handle(TemplateViewRouteImpl.java:66) at spark.http.matching.Routes.execute(Routes.java:61) at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:126) at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119) at org.eclipse.jetty.server.Server.handle(Server.java:517) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242) at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261) at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213) at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) at java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException: error constructing MAC: java.lang.SecurityException: JCE cannot authenticate the provider BC at org.bouncycastle.jcajce.provider.keystore.pkcs12.PKCS12KeyStoreSpi.engineLoad(Unknown Source) at java.security.KeyStore.load(Unknown Source) at cz.tomasdvorak.eet.client.security.ClientKey.getKeyStore(ClientKey.java:83) ... 22 more

todvora commented 7 years ago

Dobrý večer, Výjimka java.lang.SecurityException: JCE cannot authenticate the provider BC naznačuje, že knihovna je k dispozici, ale nastal problém s ověřením digitálního podpisu jaru BouncyCastle. Při pokusech přibalit jej k aplikaci (farjar) nastává obdobný problém.

Vidím, že knihovnu používáte ve webové aplikaci spuštěné v Jetty. Ověřil bych, jak se build chová k závislostem a jak přibaluje jary k výsledné aplikaci.

Pokud bych závislost nastavil na <scope>provided</scope>, musel by každý uživatel knihovnu poskytnout sám a asi bych tak více lidem práci přidělal než zjednodušil. Pokud ale chcete dodat BC sám, mělo by fungovat excludnout mou závislost na BC a přidat jí ve svém projektu jak bude potřeba,

Kdyby nic z toho nezabralo, klidně dejte vědět.

S pozdravem Tomáš

rds76 commented 7 years ago

Mam podobnou zkusenost v jee kontejneru. Knihovnu bouncycastel je potreba umistit jako globalni lib namisto app scoped knihovny.

PavelCibulka commented 7 years ago

Dobry den, mozna by bylo reseni tuto knihovnu nepouzivat. Pouzit standardni tridy z javy 7. Projekt by pak nejel s openjdk 6.

radek252 commented 7 years ago

Diky za radu: Excludnul jsem celeho eet-clienta z fatjaru a nainstaloval ho do classpath na cilovem pocitaci rucne.

todvora commented 7 years ago

@PavelCibulka: bouhužel standardní třídy z JDK neumožňují například pracovat s CRL(např. CRLUtils.java), případně jen za cenu velkých ústupků a používání neveřejných API. Proto jsem byl nucen použít BC. Sám bych jej raději nepoužil, kdyby to bylo možné. Rád přijmu PR, pokud se pletu a jde se bez BC obejít.

@radek252: pokud takový postup vedl k cíli, tak zřejmě OK. Já bych raději zaexperimentoval s excludnitím BC a přidáním jej jako provided. Každopádně kdyby bylo něco, čím vám mohu práci usnadnit, dejte prosím vědět. Můžeme nyní issue uzavřít?

todvora commented 7 years ago

Pro pořádek v issues zavírám a doufám, že je vše vyřešeno ke spokojenosti. Pokud ne, prosím issue znovu otevřít a připojit nějaký feedback, kde můžeme pokračovat.

Díky, Tomáš