You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hola! Estoy haciendo experimentos con rshk-jsifenlib. Mi objetivo es usar en una aplicación modular con JavaFX y versiones modernas de Java. Para que eso funcione sin atar cosas con alambre es deseable que la librería
tenga un descriptor de módulo
declare dependencias para APIs que ya no existen en el JDK (JAX-WS, SOAP, JAXB)
reemplazar código que usa APIs que, aunque todavía están presentes en JDKs nuevos, no son exportadas hacia otros módulos por defecto
(1) se soluciona agregando un module-info.java al directorio raíz de código fuente ("default package") .
Mas o menos parecido a esto:
(3) es la parte mbore, ya que la clase com.roshka.sifen.internal.helpers.SignatureHelper usa clases del package sun.security.x509, que son internas y por defecto no se pueden usar salvo que el JVM se inicie con --add-exports java.base/sun.security.x509=ALL-UNNAMED.
Por suerte, aparentemente hay un solo método que usa las clases sun.security.x509.{X509CertImpl, GeneralName, X500Name} y posiblemente se puede modificar para que funcione sin usar dependencias externas.
El método en cuestión en com.roshka.sifen.internal.helpers.SignatureHelper reescrito (compila ok pero sin probar -- puede necesitar ajuste):
private static List<ValidezFirmaDigital.SujetoCertificado> getCertificateSubjects(KeyInfo keyInfo) {
List<ValidezFirmaDigital.SujetoCertificado> certificateSubjects = new ArrayList<>();
// Get certificate from Electronic Document
X509Certificate certificate = X509KeySelector.getCertificate(keyInfo);
if (certificate == null) return certificateSubjects;
// Obtener subject principal del certificado
try {
String subject = certificate.getIssuerX500Principal().getName();
certificateSubjects.add(ValidezFirmaDigital.SujetoCertificado.create(
getAttributeFromSubject(subject, "SERIALNUMBER"),
SifenUtil.coalesce(getAttributeFromSubject(subject, "CN"), getAttributeFromSubject(subject, "O"))
));
} catch (Exception ignored) {
}
// Obtener SANs desde el certificado, si existen
try {
final Collection<List<?>> sans = certificate.getSubjectAlternativeNames();
String altNameStr = null;
if(sans != null){
for(final List<?> san : sans){
if((Integer) san.get(0) == 1) // name segun rfc822
altNameStr = (String) san.get(1);
certificateSubjects.add(ValidezFirmaDigital.SujetoCertificado.create(
getAttributeFromSubject(altNameStr, "SERIALNUMBER"),
SifenUtil.coalesce(getAttributeFromSubject(altNameStr, "CN"), getAttributeFromSubject(altNameStr, "O"))
));
}
}
} catch (Exception ignored) {
}
return certificateSubjects;
}
Les parece razonable tener una rama dedicada para este caso de uso?
Saludos!
The text was updated successfully, but these errors were encountered:
Te agradezco mucho tu aporte @dschulz. Me parece muy útil e interesante, así que voy a estar creando un branch en nuestro proyecto con los cambios de tu branch para comparar las modificaciones y realizar las pruebas que faltan.
Hola Diego! Realmente no tuvimos tiempo de ponernos al día. La versión 0.5.0 que sale en este mes, va a tener soporte para Java 11 y superior. El soporte para Java 8 va a quedar exclusivamente en la rama 0.2.x.
Hola! Estoy haciendo experimentos con rshk-jsifenlib. Mi objetivo es usar en una aplicación modular con JavaFX y versiones modernas de Java. Para que eso funcione sin atar cosas con alambre es deseable que la librería
(1) se soluciona agregando un
module-info.java
al directorio raíz de código fuente ("default package") .Mas o menos parecido a esto:
(2) se puede satisfacer a Gradle agregando esto a
build.gradle
:(3) es la parte mbore, ya que la clase
com.roshka.sifen.internal.helpers.SignatureHelper
usa clases del packagesun.security.x509
, que son internas y por defecto no se pueden usar salvo que el JVM se inicie con--add-exports java.base/sun.security.x509=ALL-UNNAMED
.Por suerte, aparentemente hay un solo método que usa las clases
sun.security.x509.{X509CertImpl, GeneralName, X500Name}
y posiblemente se puede modificar para que funcione sin usar dependencias externas.El método en cuestión en
com.roshka.sifen.internal.helpers.SignatureHelper
reescrito (compila ok pero sin probar -- puede necesitar ajuste):Les parece razonable tener una rama dedicada para este caso de uso?
Saludos!
The text was updated successfully, but these errors were encountered: