-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Hello, cała Polska czekała na ten projekt 🇵🇱 💳 🇵🇱
I know you are working only with KIR card, but I have tried to use this with an EuroCert card and using opensc-pkcs11.so
PKCS#11 driver that seem to support those cards just fine:
PKCS#15 Card [CardOS V5.3 | EC00XXXXXX]:
Version : 0
Serial number : 31
Manufacturer ID: Atos IT Solutions and Services GmbH
An attempt to sign a login document from https://pz.gov.pl fails because the card does not support CKM_SHA256_RSA_PKCS
and results in the following exception:
[qtp2121926899-17] INFO eu.europa.esig.dss.validation.CommonCertificateVerifier - + New CommonCertificateVerifier created.
[qtp2121926899-17] INFO eu.europa.esig.dss.token.AbstractSignatureTokenConnection - Signature algorithm : SHA256withRSA
[qtp2121926899-17] ERROR pl.podpisfree.api.Server - Can not process 'sign' api request.
pl.podpisfree.crypto.XMLSigner$XMLSignerException: Unable to sign
at pl.podpisfree.crypto.XMLSigner.sign(XMLSigner.java:92)
at pl.podpisfree.api.Server.lambda$run$5(Server.java:137)
at spark.RouteImpl$1.handle(RouteImpl.java:72)
at spark.http.matching.Routes.execute(Routes.java:61)
at spark.http.matching.MatcherFilter.doFilter(MatcherFilter.java:134)
at spark.embeddedserver.jetty.JettyHandler.doHandle(JettyHandler.java:50)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1598)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410)
at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: eu.europa.esig.dss.model.DSSException: Unable to sign : no such algorithm: SHA256withRSA for provider SunPKCS11-SmartCardXXX
at eu.europa.esig.dss.token.AbstractSignatureTokenConnection.sign(AbstractSignatureTokenConnection.java:88)
at eu.europa.esig.dss.token.AbstractSignatureTokenConnection.sign(AbstractSignatureTokenConnection.java:66)
at eu.europa.esig.dss.token.AbstractSignatureTokenConnection.sign(AbstractSignatureTokenConnection.java:58)
at pl.podpisfree.crypto.CryptoCard.sign(CryptoCard.java:85)
at pl.podpisfree.crypto.XMLSigner.sign(XMLSigner.java:82)
... 28 more
Caused by: java.security.NoSuchAlgorithmException: no such algorithm: SHA256withRSA for provider SunPKCS11-SmartCardXXX
at java.base/sun.security.jca.GetInstance.getService(GetInstance.java:101)
at java.base/sun.security.jca.GetInstance.getInstance(GetInstance.java:218)
at java.base/java.security.Signature.getInstance(Signature.java:450)
at eu.europa.esig.dss.token.Pkcs11SignatureToken.getSignatureInstance(Pkcs11SignatureToken.java:360)
at eu.europa.esig.dss.token.AbstractSignatureTokenConnection.sign(AbstractSignatureTokenConnection.java:136)
at eu.europa.esig.dss.token.AbstractSignatureTokenConnection.sign(AbstractSignatureTokenConnection.java:82)
... 32 more
Here is what my PKCS#11 driver reports:
> pkcs11-tool -M
Using slot 0 with a present token (0x0)
Supported mechanisms:
SHA-1, digest
SHA224, digest
SHA256, digest
SHA384, digest
SHA512, digest
MD5, digest
RIPEMD160, digest
GOSTR3411, digest
RSA-X-509, keySize={512,4096}, hw, decrypt, sign, verify
RSA-PKCS, keySize={512,4096}, hw, decrypt, sign, verify
SHA1-RSA-PKCS, keySize={512,4096}, sign, verify
RSA-PKCS-PSS, keySize={512,4096}, hw, sign, verify
SHA1-RSA-PKCS-PSS, keySize={512,4096}, sign, verify
RSA-PKCS-OAEP, keySize={512,4096}, hw, decrypt
In theory, the solution is easy - hash first in the software and use CKM_RSA_PKCS
mechanism as a fall back.
But with Java, the questions is which layer should detect this and change the mechanism used.
Big thanks for putting this out - it's a new hope for me!
Metadata
Metadata
Assignees
Labels
No labels