aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-web
diff options
context:
space:
mode:
Diffstat (limited to 'pdf-as-web')
-rw-r--r--pdf-as-web/build.gradle11
-rw-r--r--pdf-as-web/src/main/configuration/pdf-as-web.properties41
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java10
-rw-r--r--pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java117
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleVerifyServletTest.java163
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java92
-rw-r--r--pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java92
-rw-r--r--pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties64
-rw-r--r--pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties2
-rw-r--r--pdf-as-web/src/test/resources/config/pdfas/test.crt20
-rw-r--r--pdf-as-web/src/test/resources/config/pdfas/test.p12bin1089 -> 942 bytes
-rw-r--r--pdf-as-web/src/test/resources/data/dummy-pdf-signed.pdfbin0 -> 167548 bytes
-rw-r--r--pdf-as-web/src/test/resources/data/placeholder_sigfield_and_qr.pdfbin0 -> 181919 bytes
13 files changed, 533 insertions, 79 deletions
diff --git a/pdf-as-web/build.gradle b/pdf-as-web/build.gradle
index 067b9a96..926d19fd 100644
--- a/pdf-as-web/build.gradle
+++ b/pdf-as-web/build.gradle
@@ -57,16 +57,16 @@ dependencies {
api project (':pdf-as-web-statistic-api')
api project (':pdf-as-pdfbox-2')
api group: 'commons-fileupload', name: 'commons-fileupload', version: '1.5'
- api group: 'commons-io', name: 'commons-io', version: '2.15.1'
+ api group: 'commons-io', name: 'commons-io', version: '2.16.1'
api group: 'opensymphony', name: 'sitemesh', version: '2.4.2'
api group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
api group: 'javax.xml.ws', name: 'jaxws-api', version: '2.3.1'
api group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '2.3.3'
- api "commons-codec:commons-codec:1.16.1"
- api 'org.apache.commons:commons-lang3:3.14.0'
+ api "commons-codec:commons-codec:1.17.1"
+ api 'org.apache.commons:commons-lang3:3.17.0'
api group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
- api 'org.apache.cxf:cxf-rt-transports-http:3.5.8'
- api 'org.apache.cxf:cxf-rt-frontend-jaxws:3.5.8'
+ api 'org.apache.cxf:cxf-rt-transports-http:3.5.9'
+ api 'org.apache.cxf:cxf-rt-frontend-jaxws:3.5.9'
api 'com.thetransactioncompany:cors-filter:2.10'
api 'ch.qos.logback:logback-classic:1.2.13'
api 'ch.qos.logback:logback-core:1.2.13'
@@ -74,6 +74,7 @@ dependencies {
api group: 'javax.jws', name: 'javax.jws-api', version: '1.1'
compileOnly 'javax.servlet:javax.servlet-api:3.0.1'
testImplementation 'org.springframework:spring-test:5.3.31'
+ testImplementation 'org.springframework:spring-web:5.3.31'
}
diff --git a/pdf-as-web/src/main/configuration/pdf-as-web.properties b/pdf-as-web/src/main/configuration/pdf-as-web.properties
index fe6c9576..845a82e0 100644
--- a/pdf-as-web/src/main/configuration/pdf-as-web.properties
+++ b/pdf-as-web/src/main/configuration/pdf-as-web.properties
@@ -1,12 +1,10 @@
-
+##############################################################################
pdfas.dir=conf/pdf-as
+public.url=http://localhost:8080/pdf-as-web
+#public.data.url=http://localhost:8088/pdf-as-web
error.showdetails=false
-bku.local.url=http://127.0.0.1:3495/http-security-layer-request
-
-bku.mobile.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
-
# Allow configuration overwrite from external sources
# use with care!
allow.ext.overwrite=false
@@ -18,6 +16,14 @@ allow.ext.overwrite=false
# by external components
ext.overwrite.wl.1=^$
+
+##############################################################################
+## Signing by Security-Layer
+bku.local.url=http://127.0.0.1:3495/http-security-layer-request
+bku.mobile.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+
+
+##############################################################################
ks.enabled=false
ks.file=test.p12
ks.type=PKCS12
@@ -25,6 +31,8 @@ ks.pass=123456
ks.key.alias=ecc_test
ks.key.pass=123456
+
+##############################################################################
## KeyStore List
# Entries are addressable via KeyIdentifier
# Example Entry with address "test"
@@ -35,6 +43,8 @@ ksl.test.pass=123456
ksl.test.key.alias=test1
ksl.test.key.pass=123456
+
+##############################################################################
## Moa List
# Entries are addressable via KeyIdentifier
# Example Entry with address "test"
@@ -43,16 +53,26 @@ moal.test.url=http://localhost:8080/moa-spss/services/SignatureCreation
moal.test.KeyIdentifier=KG_ECC_TEST
moal.test.Certificate=KG_ECC_TEST.crt
-#Enable SOAP Service
+
+##############################################################################
+###### Enable SOAP Service
+# Enable signing endpoint
soap.sign.enabled=true
+# Enable implicide signature-verification during WebService signing
+soap.sign.with.verify.enabled=true
+
+# Enable signature-verification endpoint
+# soap.verify.enabled=false
+
+
+##############################################################################
whitelist.enabled=true
# Matches everything
whitelist.url.01=^.*$
-public.url=http://localhost:8080/pdf-as-web
-#public.data.url=http://localhost:8088/pdf-as-web
+##############################################################################
#Request Store
# Default In Memory Store
request.store=at.gv.egiz.pdfas.web.store.InMemoryRequestStore
@@ -74,8 +94,9 @@ request.store=at.gv.egiz.pdfas.web.store.InMemoryRequestStore
#hibernate.props.hibernate.show_sql=true
#hibernate.props.hibernate.hbm2ddl.auto=update
-#Security layer 2.0 config
+##############################################################################
+#Security layer 2.0 config
#sl20.sign.enabled=true
#sl20.mobile.url=http://localhost:7080/vda/services/getCertificate
sl20.keystore.file=
@@ -89,4 +110,4 @@ sl20.debug.signed.result.enabled=false
sl20.debug.signed.result.required=false
sl20.debug.encryption.enabled=false
sl20.debug.encryption.required=false
-sl20.transfermode.filesize=20000000 \ No newline at end of file
+sl20.transfermode.filesize=20000000
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java
index 81b60131..7177541c 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/config/WebConfiguration.java
@@ -58,6 +58,7 @@ public class WebConfiguration implements IConfigurationConstants {
public static final String MOA_SS_ENABLED = "moa.enabled";
public static final String SOAP_SIGN_ENABLED = "soap.sign.enabled";
+ public static final String SOAP_SIGN_WITH_VERIFY_ENABLED = "soap.sign.with.verify.enabled";
public static final String SOAP_VERIFY_ENABLED = "soap.verify.enabled";
public static final String RELOAD_PASSWORD = "reload.pwd";
public static final String RELOAD_ENABLED = "reload.enabled";
@@ -506,6 +507,15 @@ public class WebConfiguration implements IConfigurationConstants {
return false;
}
+ public static boolean isSoapSignWithVerifyEnabled() {
+ String value = properties.getProperty(SOAP_SIGN_WITH_VERIFY_ENABLED);
+ if (value != null) {
+ return value.equals("true");
+
+ }
+ return getSoapSignEnabled();
+ }
+
public static boolean getSoapVerifyEnabled() {
String value = properties.getProperty(SOAP_VERIFY_ENABLED);
if (value != null) {
diff --git a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
index 2c248059..dce3e34c 100644
--- a/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
+++ b/pdf-as-web/src/main/java/at/gv/egiz/pdfas/web/ws/PDFASSigningImpl.java
@@ -455,67 +455,80 @@ public class PDFASSigningImpl implements PDFASSigning {
@SneakyThrows
private void validatePdfSignature(SignedDocument el, PdfasSignRequest request,
StatisticEvent statisticEvent) {
-
- Map<String, String> preProcessor = null;
- if (request.getCoreParams().getPreprocessor() != null) {
- preProcessor = request.getCoreParams().getPreprocessor();
-
- }
-
- VerifyResult verifyResult = null;
- if (request.getVerificationLevel() != null &&
- request.getVerificationLevel().equals(
- VerificationLevel.FULL_CERT_PATH)) {
- final List<VerifyResult> verResults = PdfAsHelper
- .synchronousVerify(
- el.getOutputData(),
- -1,
- SignatureVerificationLevel.FULL_VERIFICATION,
- preProcessor);
-
- if (verResults.size() < 1) {
- throw new WebServiceException(
- "Document verification failed! " + verResults.size());
+
+ if (WebConfiguration.isSoapSignWithVerifyEnabled()) {
+ Map<String, String> preProcessor = null;
+ if (request.getCoreParams().getPreprocessor() != null) {
+ preProcessor = request.getCoreParams().getPreprocessor();
+
}
- verifyResult = verResults.get(verResults.size() - 1);
- } else {
- final List<VerifyResult> verResults = PdfAsHelper
- .synchronousVerify(
- el.getOutputData(),
- -1,
- SignatureVerificationLevel.INTEGRITY_ONLY_VERIFICATION,
- preProcessor);
-
- if (verResults.size() < 1) {
- throw new WebServiceException(
- "Document verification failed! " + verResults.size());
+
+ VerifyResult verifyResult = null;
+ if (request.getVerificationLevel() != null &&
+ request.getVerificationLevel().equals(
+ VerificationLevel.FULL_CERT_PATH)) {
+ final List<VerifyResult> verResults = PdfAsHelper
+ .synchronousVerify(
+ el.getOutputData(),
+ -1,
+ SignatureVerificationLevel.FULL_VERIFICATION,
+ preProcessor);
+
+ if (verResults.size() < 1) {
+ throw new WebServiceException(
+ "Document verification failed! " + verResults.size());
+ }
+ verifyResult = verResults.get(verResults.size() - 1);
+ } else {
+ final List<VerifyResult> verResults = PdfAsHelper
+ .synchronousVerify(
+ el.getOutputData(),
+ -1,
+ SignatureVerificationLevel.INTEGRITY_ONLY_VERIFICATION,
+ preProcessor);
+
+ if (verResults.size() < 1) {
+ throw new WebServiceException(
+ "Document verification failed! " + verResults.size());
+ }
+
+ verifyResult = verResults.get(verResults.size() - 1);
+
}
+
+ if (verifyResult.getValueCheckCode().getCode() == 0) {
+ statisticEvent.setStatus(Status.OK);
+ statisticEvent.setEndNow();
+ statisticEvent.setTimestampNow();
+ statisticEvent.setFilesize(el.getOutputData().length);
+ StatisticFrontend.getInstance().storeEvent(statisticEvent);
+ statisticEvent.setLogged(true);
+
+ } else {
+ statisticEvent.setStatus(Status.ERROR);
+ statisticEvent.setErrorCode(verifyResult.getValueCheckCode().getCode());
+ statisticEvent.setEndNow();
+ statisticEvent.setTimestampNow();
+ statisticEvent.setFilesize(el.getOutputData().length);
+ StatisticFrontend.getInstance().storeEvent(statisticEvent);
+ statisticEvent.setLogged(true);
+ }
+
+ el.getVerificationResponse().setCertificateCode(
+ verifyResult.getCertificateCheck().getCode());
+ el.getVerificationResponse().setValueCode(
+ verifyResult.getValueCheckCode().getCode());
- verifyResult = verResults.get(verResults.size() - 1);
-
- }
-
- if (verifyResult.getValueCheckCode().getCode() == 0) {
- statisticEvent.setStatus(Status.OK);
- statisticEvent.setEndNow();
- statisticEvent.setTimestampNow();
- statisticEvent.setFilesize(el.getOutputData().length);
- StatisticFrontend.getInstance().storeEvent(statisticEvent);
- statisticEvent.setLogged(true);
} else {
- statisticEvent.setStatus(Status.ERROR);
- statisticEvent.setErrorCode(verifyResult.getValueCheckCode().getCode());
+ log.debug("Implicite signature-verification skipped by configuration");
+ statisticEvent.setStatus(Status.OK);
statisticEvent.setEndNow();
statisticEvent.setTimestampNow();
statisticEvent.setFilesize(el.getOutputData().length);
StatisticFrontend.getInstance().storeEvent(statisticEvent);
statisticEvent.setLogged(true);
+
}
-
- el.getVerificationResponse().setCertificateCode(
- verifyResult.getCertificateCheck().getCode());
- el.getVerificationResponse().setValueCode(
- verifyResult.getValueCheckCode().getCode());
-
+
}
}
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleVerifyServletTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleVerifyServletTest.java
new file mode 100644
index 00000000..046a1203
--- /dev/null
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleVerifyServletTest.java
@@ -0,0 +1,163 @@
+package at.gv.egiz.pdfas.web.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Enumeration;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.springframework.mock.web.MockHttpServletResponse;
+
+import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException;
+import at.gv.egiz.pdfas.common.settings.ISettings;
+import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
+import at.gv.egiz.pdfas.web.config.WebConfiguration;
+import at.gv.egiz.pdfas.web.filter.UserAgentFilter;
+import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
+import at.gv.egiz.pdfas.web.servlets.VerifyServlet;
+import at.gv.egiz.pdfas.web.stats.StatisticEvent;
+import at.gv.egiz.pdfas.web.stats.StatisticEvent.Operation;
+import at.gv.egiz.pdfas.web.stats.StatisticEvent.Source;
+import lombok.SneakyThrows;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class SimpleVerifyServletTest {
+
+
+ @BeforeClass
+ public static void classInitializer() throws IOException {
+ final String current = new java.io.File(".").getCanonicalPath();
+ System.setProperty("pdf-as-web.conf",
+ current + "/src/test/resources/config/pdfas/pdf-as-web.properties");
+
+ String webconfig = System.getProperty("pdf-as-web.conf");
+
+ if(webconfig == null) {
+ throw new RuntimeException("No web configuration provided!");
+ }
+
+ WebConfiguration.configure(webconfig);
+ PdfAsHelper.init();
+
+ try {
+ PdfAsFactory.validateConfiguration((ISettings)PdfAsHelper.getPdfAsConfig());
+
+ } catch (PdfAsSettingsValidationException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ @Test
+ @SneakyThrows
+ public void unsignedPdf() {
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
+ executeTest(pdf);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void unsignedWithSigField() {
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
+ executeTest(pdf);
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void signedPdf() {
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/dummy-pdf-signed.pdf"));
+ executeTest(pdf);
+
+ }
+
+
+
+
+ @SneakyThrows
+ private MockHttpServletResponse executeTest(byte[] pdf) {
+ MockHttpServletRequest httpReq = new MockHttpServletRequest("POST", "https://localhost/pdfas");
+ MockHttpServletResponse httpResp = new MockHttpServletResponse();
+
+ // perform operation
+ performTest(httpReq, httpResp, pdf);
+
+ //validate state
+ assertNotNull("httpResp", httpResp);
+ assertEquals("httpStatus", 200, httpResp.getStatus());
+ String body = httpResp.getContentAsString();
+ assertFalse("Empty body", StringUtils.isEmpty(body));
+
+ return httpResp;
+
+ }
+
+
+ private void performTest(HttpServletRequest httpReq, HttpServletResponse httpResp, byte[] pdf) throws NoSuchMethodException,
+ SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, ServletException {
+ VerifyServlet servlet = new VerifyServlet ();
+ ServletConfig servletConfig = buildServletConfig();
+ servlet.init(servletConfig);
+
+ Method method = servlet.getClass().getDeclaredMethod("doVerify",
+ HttpServletRequest.class, HttpServletResponse.class, byte[].class, StatisticEvent.class);
+ method.setAccessible(true);
+ StatisticEvent statisticEvent = new StatisticEvent();
+ statisticEvent.setStartNow();
+ statisticEvent.setSource(Source.WEB);
+ statisticEvent.setOperation(Operation.VERIFY);
+ statisticEvent.setUserAgent(UserAgentFilter.getUserAgent());
+
+ method.invoke(servlet, httpReq, httpResp, pdf, statisticEvent);
+
+ }
+
+
+ private ServletConfig buildServletConfig() {
+
+ return new ServletConfig() {
+
+ private ServletContext servletContext = null;
+
+ @Override
+ public String getServletName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ServletContext getServletContext() {
+ return servletContext;
+ }
+
+ @Override
+ public Enumeration<String> getInitParameterNames() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getInitParameter(String name) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ };
+ }
+}
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java
new file mode 100644
index 00000000..1d958323
--- /dev/null
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceTest.java
@@ -0,0 +1,92 @@
+package at.gv.egiz.pdfas.web.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+import java.util.UUID;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+import at.gv.egiz.pdfas.api.ws.PDFASSignParameters;
+import at.gv.egiz.pdfas.api.ws.PDFASSignParameters.Connector;
+import at.gv.egiz.pdfas.api.ws.PDFASSignRequest;
+import at.gv.egiz.pdfas.api.ws.PDFASSignResponse;
+import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException;
+import at.gv.egiz.pdfas.common.settings.ISettings;
+import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
+import at.gv.egiz.pdfas.web.config.WebConfiguration;
+import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
+import at.gv.egiz.pdfas.web.ws.PDFASSigningImpl;
+import lombok.SneakyThrows;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class SimpleWebServiceTest {
+
+ @BeforeClass
+ public static void classInitializer() throws IOException {
+ final String current = new java.io.File(".").getCanonicalPath();
+ System.setProperty("pdf-as-web.conf",
+ current + "/src/test/resources/config/pdfas/pdf-as-web.properties");
+
+ String webconfig = System.getProperty("pdf-as-web.conf");
+
+ if(webconfig == null) {
+ throw new RuntimeException("No web configuration provided!");
+ }
+
+ WebConfiguration.configure(webconfig);
+ PdfAsHelper.init();
+
+ try {
+ PdfAsFactory.validateConfiguration((ISettings)PdfAsHelper.getPdfAsConfig());
+
+ } catch (PdfAsSettingsValidationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ @SneakyThrows
+ public void sign() {
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
+ PDFASSignResponse resp = executeTest(pdf);
+ assertNotNull("signed doc", resp.getSignedPDF());
+ assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
+ assertNotNull("sigern Cert", resp.getVerificationResponse().getSignerCertificate());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void withSignatureFields() {
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
+ PDFASSignResponse resp = executeTest(pdf);
+ assertNotNull("signed doc", resp.getSignedPDF());
+ assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
+ assertNotNull("sigern Cert", resp.getVerificationResponse().getSignerCertificate());
+
+ }
+
+ @SneakyThrows
+ private PDFASSignResponse executeTest(byte[] pdf) {
+ PDFASSigningImpl service = new PDFASSigningImpl();
+
+ PDFASSignRequest req = new PDFASSignRequest();
+ req.setRequestID(UUID.randomUUID().toString());
+ req.setInputData(pdf);
+ PDFASSignParameters signParams = new PDFASSignParameters();
+ signParams.setConnector(Connector.JKS);
+ signParams.setTransactionId(UUID.randomUUID().toString());
+ req.setParameters(signParams );
+
+ PDFASSignResponse resp = service.signPDFDokument(req);
+ assertNotNull(resp);
+ return resp;
+
+ }
+}
diff --git a/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java
new file mode 100644
index 00000000..d7529721
--- /dev/null
+++ b/pdf-as-web/src/test/java/at/gv/egiz/pdfas/web/test/SimpleWebServiceWithoutVerificationTest.java
@@ -0,0 +1,92 @@
+package at.gv.egiz.pdfas.web.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.IOException;
+import java.util.UUID;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
+
+import at.gv.egiz.pdfas.api.ws.PDFASSignParameters;
+import at.gv.egiz.pdfas.api.ws.PDFASSignParameters.Connector;
+import at.gv.egiz.pdfas.api.ws.PDFASSignRequest;
+import at.gv.egiz.pdfas.api.ws.PDFASSignResponse;
+import at.gv.egiz.pdfas.common.exceptions.PdfAsSettingsValidationException;
+import at.gv.egiz.pdfas.common.settings.ISettings;
+import at.gv.egiz.pdfas.lib.api.PdfAsFactory;
+import at.gv.egiz.pdfas.web.config.WebConfiguration;
+import at.gv.egiz.pdfas.web.helper.PdfAsHelper;
+import at.gv.egiz.pdfas.web.ws.PDFASSigningImpl;
+import lombok.SneakyThrows;
+
+@RunWith(BlockJUnit4ClassRunner.class)
+public class SimpleWebServiceWithoutVerificationTest {
+
+ @BeforeClass
+ public static void classInitializer() throws IOException {
+ final String current = new java.io.File(".").getCanonicalPath();
+ System.setProperty("pdf-as-web.conf",
+ current + "/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties");
+
+ String webconfig = System.getProperty("pdf-as-web.conf");
+
+ if(webconfig == null) {
+ throw new RuntimeException("No web configuration provided!");
+ }
+
+ WebConfiguration.configure(webconfig);
+ PdfAsHelper.init();
+
+ try {
+ PdfAsFactory.validateConfiguration((ISettings)PdfAsHelper.getPdfAsConfig());
+
+ } catch (PdfAsSettingsValidationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test
+ @SneakyThrows
+ public void sign() {
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/enc_own.pdf"));
+ PDFASSignResponse resp = executeTest(pdf);
+ assertNotNull("signed doc", resp.getSignedPDF());
+ assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
+ assertNotNull("sigern Cert", resp.getVerificationResponse().getSignerCertificate());
+
+ }
+
+ @Test
+ @SneakyThrows
+ public void withSignatureFields() {
+ byte[] pdf = IOUtils.toByteArray(SimpleVerifyServletTest.class.getResourceAsStream("/data/placeholder_sigfield_and_qr.pdf"));
+ PDFASSignResponse resp = executeTest(pdf);
+ assertNotNull("signed doc", resp.getSignedPDF());
+ assertEquals("sign check", 0, resp.getVerificationResponse().getValueCode());
+ assertNotNull("sigern Cert", resp.getVerificationResponse().getSignerCertificate());
+
+ }
+
+ @SneakyThrows
+ private PDFASSignResponse executeTest(byte[] pdf) {
+ PDFASSigningImpl service = new PDFASSigningImpl();
+
+ PDFASSignRequest req = new PDFASSignRequest();
+ req.setRequestID(UUID.randomUUID().toString());
+ req.setInputData(pdf);
+ PDFASSignParameters signParams = new PDFASSignParameters();
+ signParams.setConnector(Connector.JKS);
+ signParams.setTransactionId(UUID.randomUUID().toString());
+ req.setParameters(signParams );
+
+ PDFASSignResponse resp = service.signPDFDokument(req);
+ assertNotNull(resp);
+ return resp;
+
+ }
+}
diff --git a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties
new file mode 100644
index 00000000..168af5e9
--- /dev/null
+++ b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web-verify-disabled.properties
@@ -0,0 +1,64 @@
+
+pdfas.dir=./src/test/resources/config/pdfas/
+
+bku.sign.enabled=true
+mobile.sign.enabled=true
+
+error.showdetails=true
+
+public.url=http://labda.iaik.tugraz.at:6080/pdf-as-web
+
+bku.local.url=http://127.0.0.1:3495/http-security-layer-request
+
+bku.online.url=https://demo.egiz.gv.at/bkuonline/http-security-layer-request
+
+#bku.mobile.url=https://www.handy-signatur.at/mobile/https-security-layer-request/default.aspx
+#bku.mobile.url=https://test1.a-trust.at/mobile/https-security-layer-request/Default.aspx
+bku.mobile.url=https://www.a-trust.at/mobile/https-security-layer-request/default.aspx
+
+sl20.sign.enabled=true
+sl20.mobile.url=http://localhost:7080/vda/services/getCertificate
+#sl20.mobile.url=https://demo.egiz.gv.at/vda/services/getCertificate
+#sl20.mobile.url=https://test1.a-trust.at/securitylayer2
+sl20.keystore.file=
+sl20.keystore.type=JKS
+sl20.keystore.pass=
+sl20.keystore.sign.key.alias=
+sl20.keystore.sign.key.pass=
+sl20.keystore.enc.key.alias=
+sl20.keystore.enc.key.pass=
+sl20.debug.validation.disable=true
+sl20.debug.signed.result.enabled=false
+sl20.debug.signed.result.required=false
+sl20.debug.encryption.enabled=false
+sl20.debug.encryption.required=false
+
+runtime.backend=PDFBOX_2_BACKEND
+
+
+qr.placeholder.generator.enabled=true
+
+json.enabled=true
+
+moa.enabled=false
+
+soap.sign.enabled=true
+soap.sign.with.verify.enabled=false
+soap.verify.enabled=true
+
+ks.enabled=true
+ks.file=./src/test/resources/config/pdfas/test.p12
+ks.type=PKCS12
+ks.pass=123456
+ks.key.alias=1
+#ks.key.alias=ecc_test
+ks.key.pass=123456
+
+whitelist.enabled=true
+# Matches everything
+whitelist.url.01=^.*$
+
+allow.ext.overwrite=true
+ext.overwrite.wl.01=sig_obj.type.defadult
+
+default.protectPDF = true
diff --git a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties
index 3b9fd0c3..b25818ca 100644
--- a/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties
+++ b/pdf-as-web/src/test/resources/config/pdfas/pdf-as-web.properties
@@ -49,7 +49,7 @@ ks.enabled=true
ks.file=./src/test/resources/config/pdfas/test.p12
ks.type=PKCS12
ks.pass=123456
-ks.key.alias=testKey
+ks.key.alias=1
#ks.key.alias=ecc_test
ks.key.pass=123456
diff --git a/pdf-as-web/src/test/resources/config/pdfas/test.crt b/pdf-as-web/src/test/resources/config/pdfas/test.crt
index 473ef073..01b43e09 100644
--- a/pdf-as-web/src/test/resources/config/pdfas/test.crt
+++ b/pdf-as-web/src/test/resources/config/pdfas/test.crt
@@ -1,13 +1,11 @@
-----BEGIN CERTIFICATE-----
-MIIB9TCCAZygAwIBAgIJALDBdnsGlQ29MAkGByqGSM49BAEwWDELMAkGA1UEBhMC
-QVQxEzARBgNVBAgMClNvbWUtU3RhdGUxDTALBgNVBAoMBEVHSVoxJTAjBgNVBAMM
-HFRFU1QgU0lHTkFUVVJFIEtFWSBGT1IgUERGQVMwHhcNMTQwNzMxMTAzNjM0WhcN
-MjQwNzI4MTAzNjM0WjBYMQswCQYDVQQGEwJBVDETMBEGA1UECAwKU29tZS1TdGF0
-ZTENMAsGA1UECgwERUdJWjElMCMGA1UEAwwcVEVTVCBTSUdOQVRVUkUgS0VZIEZP
-UiBQREZBUzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHh0e27nasUfFnJeFC9k
-UoSNwfQ83D/UhxM1Qd5omHVTBpQ72pFWqldGhuV/aiL0s8yPSwJO4aItDK6zi5Ul
-FtejUDBOMB0GA1UdDgQWBBRftAM9CZEnffWxrfMqdIoYnySt3DAfBgNVHSMEGDAW
-gBRftAM9CZEnffWxrfMqdIoYnySt3DAMBgNVHRMEBTADAQH/MAkGByqGSM49BAED
-SAAwRQIgDLcCaKC+y0xWZdEUTZSnryFLo0BDMws7J40wytBgJYcCIQDPsUN40/cO
-xR1lNU5CppiyfOPM0rEF/SzOlIZqa+79Cw==
+MIIBqzCCAVECFDtm2kErVP1ld9wtz1hvu5Q/nd/5MAoGCCqGSM49BAMCMFgxCzAJ
+BgNVBAYTAkFUMRMwEQYDVQQIDApTb21lLVN0YXRlMQ0wCwYDVQQKDARFR0laMSUw
+IwYDVQQDDBxURVNUIFNJR05BVFVSRSBLRVkgRk9SIFBERkFTMB4XDTI0MDkwNTA4
+NDAyOVoXDTM0MDkwMzA4NDAyOVowWDELMAkGA1UEBhMCQVQxEzARBgNVBAgMClNv
+bWUtU3RhdGUxDTALBgNVBAoMBEVHSVoxJTAjBgNVBAMMHFRFU1QgU0lHTkFUVVJF
+IEtFWSBGT1IgUERGQVMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAR4dHtu52rF
+HxZyXhQvZFKEjcH0PNw/1IcTNUHeaJh1UwaUO9qRVqpXRoblf2oi9LPMj0sCTuGi
+LQyus4uVJRbXMAoGCCqGSM49BAMCA0gAMEUCIQCgz8mfDvk3p/VLISMZQuTSUwXo
+QYmazzlm1RyV/MA5DwIgUWR+SAh45D+1FS3y5udsWqVGuuOT6Pp55wgVVWM4rHg=
-----END CERTIFICATE-----
diff --git a/pdf-as-web/src/test/resources/config/pdfas/test.p12 b/pdf-as-web/src/test/resources/config/pdfas/test.p12
index 2efb849d..45924cd6 100644
--- a/pdf-as-web/src/test/resources/config/pdfas/test.p12
+++ b/pdf-as-web/src/test/resources/config/pdfas/test.p12
Binary files differ
diff --git a/pdf-as-web/src/test/resources/data/dummy-pdf-signed.pdf b/pdf-as-web/src/test/resources/data/dummy-pdf-signed.pdf
new file mode 100644
index 00000000..e66d621e
--- /dev/null
+++ b/pdf-as-web/src/test/resources/data/dummy-pdf-signed.pdf
Binary files differ
diff --git a/pdf-as-web/src/test/resources/data/placeholder_sigfield_and_qr.pdf b/pdf-as-web/src/test/resources/data/placeholder_sigfield_and_qr.pdf
new file mode 100644
index 00000000..e7a29895
--- /dev/null
+++ b/pdf-as-web/src/test/resources/data/placeholder_sigfield_and_qr.pdf
Binary files differ