signoSign/Universal is a web application used to display, edit and sign PDF documents and can be used flexibly from any end device. Apps are available for Android, iOS and Windows for simple use cases, as well as the web application ‘signoSign/Universal Document Pool’. These allow the application to be used without the need for integration. For more complex use cases, the application can be integrated seamlessly into existing systems via a range of interfaces.
This documentation describes the technical integration options and the application programming interfaces (APIs) available.
signoSign/Universal consists of a frontend that is displayed to the user in a browser or one of the signoSign/Universal apps on the client, and a backend in which the documents are processed on a Java server. A REST web service can be used to access both the database and the data stored in the session.
H2 is used as a preconfigured database. Depending on the application scenario, we recommend configuring another database in live environments.
signoSign/Universal can be configured both statically using properties files, environment variables and system variables, and dynamically to a certain extent using a REST web service. A more detailed description of the configuration can be found in the Configuration parameters section.
signoSign/Universal provides comprehensive interfaces for a wide range of technologies. The following section contains a short overview of the available interfaces and their typical applications.
The REST web service is the basis for the integration of signoSign/Universal and must always be used to generate a Viewer instance, load a document and request the URL of the Viewer in order to display it in a browser or a web view. The appearance and behaviour of the Viewer instance can also be configured.
In addition, the web service offers functions to access the configured database.
The web service enables flexible integration with almost any programming language. signoSign/Universal does not require a direct connection to other systems; all data are exchanged via web interfaces.
The REST web service can be used to configure a URL via which signoSign/Universal can load a document in the Viewer instance, as well as a URL to which signoSign/Universal can upload an edited document when saving it. This may be necessary if the REST client does not have access to the documents because they are to be created and processed on a third-party system. In this case, cookies can be set via which signoSign/Universal can also provide application information such as an authorisation.
Further information is given in the section ‘Communicating with third-party systems’.
The frontend offers a range of JavaScript functions via which the program can control the Viewer if it is embedded into another web application via an iFrame. This allows the signing process to be started or the file to be saved, for example. In addition, the surrounding application can be informed of certain events and respond to these.
The special feature of an iFrame integration is that the surrounding application can be blocked and that it retains control until the work in signoSign/Universal has been completed.
signoSign/Universal offers logging for documents and workflows. The audit logs contain various types of information on changes in the document or workflow. This information remains saved in the database regardless of the document or workflow. The audit logs for the documents and workflows can be called via the REST API.
User management is not performed directly within the application itself, but two different approaches are available.
The first approach is to configure OIDC (OpenID Connect) within the application. This allows the users to be managed through the corresponding provider, where user roles and permissions are defined by an external identity provider.
Alternatively, users can be provided through the server's security realm. In this case, user information and access rights are directly managed on the server. In both cases, users must be assigned appropriate roles in order to use the application.
For user management, the REST resources Users or User are available. These resources enable various actions, such as modifying user settings or retrieving data necessary for the operation of the application. It is also possible to delete users. However, it should be noted that deleting a user only resets their user account and does not prevent them from continuing to use the application.
By default, signoSign/Universal is supplied without a licence key entered. The full functionality of the application can be used without restriction in this state, but any signature images or pages rendered are watermarked.
If the licence verification fails or an invalid licence key is entered, a corresponding error message will appear when opening a document in signoSign/Universal. This behaviour is designed to prevent the application from being used in demo mode inadvertently.
A licence key can be set in the settings.properties file, as a Java system property or as an environment variable.
The computer name entered on the licence is compared with the output of the Java function InetAddress.getLocalHost().getHostName().
InetAddress.getLocalHost().getHostName()
The number of processor cores used entered on the licence may not be lower than the actual number of cores used by the operating server.
The number of concurrent uses entered on the licence refers exclusively to the documents displayed in the Viewer. Access to data sets or resources of the web service interface is not included in concurrent use of the Viewer.
The global server settings are specified in a standard Java properties file. The application contains a file with default settings that can be either edited directly in the file or overloaded with an externalPropertiesFile. Changes to the settings only come into effect after the application has been restarted.
[WEB-APP-ROOT]/WEB-INF/classes/settings.properties [WEB-APP-ROOT]/ssu_web-x.x.x.x.war/WEB-INF/classes/settings.properties
This section describes the possible settings in the properties file and how these settings can be configured.
Every setting in the properties file can also be configured/overwritten by Java system properties and environment variables. The points in the variable names can be replaced by underscores (optional).
Format: signotec.ssu. [SETTING]
The settings should be stored separately from the web application to simplify maintenance of the application in the future. User-defined settings should be specified in an external properties file instead of editing the default settings in the delivery package. Create a copy of the default settings and specify the storage location of the copy using the ‘signotec_ssu_externalpropertiesfile’ setting.
export signotec_ssu_externalpropertiesfile=/myConfigFolder/ssu/settings.properties
The default settings will load initially when starting signoSign/Universal and these will then be expanded/overwritten by the external settings.
The following settings are possible in settings.properties with the prefix "web.".
Describes the public URL of the signoSign/Universal application. It is used to generate access URLs for the application, for example for links in messaging e-mails of the workflows.
web.ssmPublicUrl
This property defines a URL from which the signoSign/Universal application can be accessed by the server. This URL is used in particular for REST calls that do not need to be implemented from a public interface. They reduce public traffic and facilitate load balancing.
web.ssmInternalUrl
This setting defines whether a dialog box is displayed when leaving an unchanged document that notifies the user that no changes have been made to the document.
true
false
web.showLeaveUnchangedDialog
This setting defines a list of permitted input types for the signature. During capturing, it is checked whether the input type used is included in the list. If the input type is not included, capturing is cancelled with a note regarding the valid input types.
MOUSE
TOUCH
PEN
PAD
SIGNME
web.supportedCaptureInput
MOUSE,TOUCH,PEN,PAD
0
1
This setting defines the order in which the signature fields are jumped to in the Viewer when the signing process for all fields is started by clicking the Sign button or the signing process is started through the automatedSignStartMode setting.
FIELDORDER
TABORDER
web.signatureFieldsOrderMode
This setting defines whether documents can only be signed with signature pads, or with the mouse or a touch device as well. If this option is enabled and no signature device is detected, all signature fields in the document will be hidden. This option is ignored when using signoSign/Universal apps.
web.hardwarePadsOnly
This setting determines whether signatures with the mouse pointer are disabled.
web.disableMouseSignature
This setting defines whether to search for serial pads and at which ports of the client device. Serial devices are not searched for by default.
NONE
2;3;5;7
ALL
web.serialPadSearchType
This setting defines the domain names and the port from which the WebSocket of the signoPAD API/Web can be addressed. This setting is ignored if the add-on for Internet Explorer (ActiveX Pad Server) is used. You can find more information on this in the signoPAD API/Web documentation.
web.wssDomainPort
local.signotecwebsocket.de:49494
This setting defines the pen colour of the signature.
#0000FF
#00F
BLUE, RED, BLACK, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, PINK, ORANGE, WHITE, YELLOW
web.signatureColor
BLUE
signoSign/Universal apps allow signatures to be inserted into a document together with a photo. This setting determines whether this option is available during the signing processes.
web.photoAllowedInApp
In the logout process (signoSign/Universal logout button), the server attempts to redirect the client to several URLs in the following order. First, the URL that was sent with the referer request parameter when the document was loaded is used. If no referer has been transferred, the client is redirected to the logout URL.
referer
web.logoutUrl
The visibility of many of the toolbar buttons can be configured. A button can be configured to be visible, to be displayed in the submenu only, to be displayed in the header provided there is space available or to be displayed in the header as a matter of priority, which means that this button is moved to the submenu as a last resort.
SUBMENU
HIDDEN
AUTO
HEADER
web.showDocumentOnPadButtonVisibility
web.resizeButtonsVisibility
web.logoutButtonVisibility
web.sharingButtonVisibility
web.addNoteButtonVisibility
web.thumbnailButtonVisibility
web.saveButtonVisibility
web.summaryButtonVisibility
web.signButtonVisibility
web.addSignatureFieldButtonVisibility
web.exportButtonVisibility
This setting defines whether a document is saved before it is exported from the Viewer (by clicking the Export button). All other settings that influence the saving process such as saveImportedDocuments are factored in.
web.saveBeforeExport
This setting determines whether documents that were not loaded from the persistence become persistent during the save process. This is also always used if a URL to remote storage is defined.
web.saveImportedDocuments
Determines whether an excerpt of the document is displayed around the signature when capturing a signature with a signing device. (see also signPadDocumentViewScalingFactor, signPadDocumentViewMarginLeft and signPadDocumentViewMarginTop)
web.signPadDocumentView
This setting adjusts the scaling factor for the document excerpt on the signature device. It is an integer value that specifies the scaling in per cent.
web.signPadDocumentViewScalingFactor
100
This setting displays the left-hand edge of the signature field in the document excerpt. The larger the value, the greater the distance of the field from the left-hand edge.
web.signPadDocumentViewMarginLeft
25
This setting displays the upper edge of the signature field in the document excerpt. The larger the value, the greater the distance from the upper edge.
web.signPadDocumentViewMarginTop
75
This setting defines whether the document display on the signature device is to be started automatically when the Viewer is opened. Autostart is only launched if a signotec Delta device has been found and signoPAD API/Web is installed on the client. This function is enabled by default.
web.autoShowDocumentOnPad
This setting enables debug logging on the client side via JavaScript. All outputs are written in the browser console for information purposes. We recommend disabling this option in live operations to improve performance.
web.clientDebugLogging
This setting specifies the time period after which a document loaded by the user is closed by the server.
Permitted values: All positive Integer values. 0 means that the timeout function is disabled.
Integer
web.idleTimeout
60
This setting enables the capturing of biometric data during the signature capture. If this function is enabled, additional properties of the signature such as time taken and pen pressure are captured.
web.captureBiometricData
In mock mode, started signatures are immediately confirmed with randomly generated points. The use of signature pads is disabled in this mode, but the same sequence of events is triggered in the application as if a signature device is connected. In addition, all form fields in this process are populated with the value 1 to avoid conflicts with the mandatory fields.
web.mockMode
This setting can be used to specify a PEM file that contains one or more certificate chains from certification authorities. The order of the certificates in the file can be freely selected. If a file is specified, signoSign/Universal checks whether the signature certificate stored in the signature device has been signed by one of the contained certificates. If this is not the case, then no signatures can be captured. This function is disabled by default.
This setting acts as a guarantee that only signing devices with known signature certificates can be used.
web.padCertificationAuthorities
-
This setting specifies whether capturing a signature via the signoPAD API/Web generates a raster or a vector graphic and incorporates it into the PDF.
web.legacySignatureImage
This setting specifies the accent colour for the document pool, the Viewer and e-mails sent by the server.
web.accentColor
#ee7900
This setting specifies the favicon for the document pool.
web.favicon
This setting specifies the logo for the document pool and e-mails sent by the server.
web.logo
Specifies whether signatures are captured with dynamic or constant stroke widths.
web.dynamicSignatureStrokes
This setting controls the option for the user to try an experimental version of the viewer when opening it, which is currently in a testing phase.
web.proposeNewViewer
The following settings are possible in settings.properties with the prefix "business.".
The licence key for signoSign/Universal can be entered here. Only change this value if you have consulted signotec. The application cannot be used without a valid licence key. The application runs in evaluation mode if no key is entered.
business.licenseKey
The following settings are possible in settings.properties with the prefix "persistence.".
The storage location of document types.
persistence.pathToDocumentConfigFile
./documentconfig.cfg
This setting specifies the URL to be redirected to if the Back button is clicked in the Viewer. If no URL to go back to is defined, the Back button is not displayed. When the URL is called, two parameters are attached.
docSaved
loggedOut
BACK_FUNCTION
persistence.referrerUrl
This setting determines whether a document can be opened by multiple users simultaneously. This function is disabled by default.
persistence.useDocumentLocking
This setting controls which form fields are locked or marked as read-only when capturing a signature. This function never locks signature fields and never unlocks form fields that have already been locked.
Form or signature fields specified in the ‘signature field lock dictionary’ of a PDF are always locked independently of this function.
FILLED
persistence.formFieldProtectMode
This setting defines whether signature fields may be added manually. This function is enabled by default.
persistence.signatureFieldAddingAllowed
This value specifies whether the background of the rendered signature image displayed in the document is transparent.
ALWAYS
NEVER
persistence.signatureBackgroundTansparent
This setting defines whether the signature text, such as the timestamp (see persistence.signatureText) for example, is to be added into the image of the signature and be visible in the document.
persistence.signatureTextEnabled
This setting can contain any text that is added to the signature field in addition to the signature when signing. @SIGNTIME and @LOCATION can be added as placeholders that are replaced by real values.
If the setting is left empty, a pre-set timestamp is generated in a pre-set format corresponding to the language setting of the calling browser.
@LOCATION
@SIGNTIME
persistence.signatureText
signtime: @SIGNTIME, location: @LOCATION
This setting sets the timestamp format by replacing @SIGNTIME with signatureText, if included. The format string must adhere to the rules of Java SimpleDateFormat.
y
M
d
h
H
m
s
S
z
Z
persistence.signatureTextDateTimeFormat
dd.MM.yyyy HH:mm:ss Z
A signature text can be added to every signature field. These settings allow you to define the alignment of the text.
LEFT
CENTER
RIGHT
persistence.signatureTextHorizontalAlign
BOTTOM
TOP
persistence.signatureTextVerticalAlign
This setting defines whether the function for sharing the document is enabled. If this function is disabled, the toolbar button is disabled/greyed out. The visibility of the toolbar button is configured using web.sharingButtonVisibility.
persistence.documentSharing
This setting defines whether the password of a shared document can be edited before the process is carried out. This function is enabled by default.
persistence.documentSharingEditablePassword
This property allows you to specify whether and how the signature capture is automatically started when a document is opened.
FIRST_FIELD
FIRST_MANDATORY_FIELD
CELL_PHONE_AUSTRIA
persistence.automatedSignStartMode
This property allows you to specify whether and when a document is saved automatically.
SIGNATURE_STARTING
SIGNATURE_FINISHED
ALL_FIELDS_SIGNED
DOCUMENT_CLOSING
persistence.automatedSaveMode
This setting defines whether the signature capture for a signature field can be started by clicking on the signature field. If this function is disabled, the signatures can only be captured in the predetermined order by using the ‘Sign’ button.
persistence.allowSignfieldSelection
This setting controls whether the captured data of a signature are encrypted in the signotec signature device or in the backend of the web application. This means it only affects signatures captured with signature devices.
IFSUPPORTED
persistence.usePadEncryption
signoSign/Universal requires both a certificate for the encryption of the signature and a certificate with a private key for signing the document. See also the Certificates section. Encryption in the signature device is controlled using the persistence.usePadEncryption setting.
Please note: To encrypt biometric data, signoSign/Universal is supplied with a certificate as standard that is created and managed by a notary. This provides the greatest possible security when dealing with sensitive signature data without you having to deal with key management. In the case of a dispute, the notary can be instructed to decrypt the biometric data. If you would prefer to manage the certificates yourself, please remember to adjust the configuration accordingly before using the system productively. More information is available directly from the signotec sales team. The document is digitally signed with a demo certificate as standard that needs to be replaced by a trusted certificate for productive use. See also the Global certificates section.
This setting defines whether an encryption certificate and a signature certificate are to be used globally for all users or whether the certificates are loaded from a central keystore.
persistence.useCertificateDataProperties
This setting defines the absolute storage location of the keystore from which the encryption certificate is loaded.
persistence.keystoreBiometric
keystoreBiometric.jks
This setting defines the type of the keystore as JKS, PKCS12, WINDOWS-MY and so on. The default value is the JRE standard type JKS or the type defined by the system property keystore.type.
persistence.biometricKeyStoreType
JKS
This setting defines the password for the keystore. Use an empty value if a password parameter of null must be transferred for the keystore implementation when the KeyStore.load() method is called.
null
KeyStore.load()
persistence.biometricKeyStorePassword
biometricKeyStorePassword
The setting for the alias of the encryption certificate in the keystore.
persistence.biometricAlias
biometricAlias
This setting defines the absolute or storage location of the keystore from which the signature certificate and the private key are loaded.
persistence.keystoreSigning
keystoreSigning.jks
persistence.signingKeyStoreType
persistence.signingKeyStorePassword
signingKeyStorePassword
This setting defines the alias of the signature certificate and the private key in the keystore.
persistence.signingAlias
signingAlias
This setting defines the password for the private key in the keystore. Use an empty value if a password parameter of null must be transferred for the keystore implementation when the KeyStore.load() method is called.
persistence.signingPrivateKeyPassword
signingPrivateKeyPassword
The following settings are available for custom setting of the desired password policy.
Setting for specifying the minimum length for entered passwords
>=
persistence.passwords.length
The setting specifies whether passwords need to contain numbers.
persistence.passwords.requireDigit
The setting specifies whether passwords need to contain upper case letters.
persistence.passwords.requireUppercase
The setting specifies whether passwords need to contain lower case letters.
persistence.passwords.requireLowercase
The setting specifies whether passwords need to contain special characters.
persistence.passwords.requireSpecial
Setting for specifying the permitted special characters.
persistence.passwords.allowedSpecialCharacters
!#$%&@
Setting for specifying the permitted authentication methods.
PASSWORD
TAN_EMAIL
TAN_SMS
NO_AUTH
persistence.allowedAuthenticationMethods
PASSWORD,TAN_EMAIL,TAN_SMS,NO_AUTH
The database connection is defined in the hibernate section of settings.properties. If a user-defined database is not specified, signoSign/Universal will start an H2 database The storage location for this database depends on the hibernate.connectionUrl setting.
The JDBC driver class. Used for the hibernate.connection.driver_class hibernate property.
hibernate.connectionDriverClassName
org.h2.Driver
The JDBC URL to the database instance. Used for the hibernate.connection.url hibernate setting.
hibernate.connectionUrl
jdbc:h2:tcp://localhost/./SSU_DB/ssupersistencedb
Hibernate uses this property to generate the corresponding SQL for the selected database. Used for the ‘hibernate.dialect’ hibernate property.
hibernate.dialect
org.hibernate.dialect.h2Dialect
The database user name. Used for the ‘hibernate.connection.username’ hibernate property.
hibernate.connectionUsername
sa
The database password. Used for the ‘hibernate.connection.password’ hibernate property.
hibernate.connectionPassword
These settings relate to the additional functions provided by signoSign/Universal.
The following settings are possible in settings.properties with the prefix ‘deployment.’.
This refers to a Boolean flag that decides whether signoSign/Universal provides the following content:
deployment.devTools
Determines whether signoSign/Universal provides a frontend for managing documents. If the server is running, the pool application can be found under ../signoSignUniversal/pool
deployment.pool
These settings relate to the REST API provided.
The following settings are possible in settings.properties with the prefix ‘restapi.’.
A list of hostnames or IP addresses that are granted access to the REST API. The asterisk symbol (‘*’) acts as a wildcard character here.
restapi.whiteList
*
These settings relate to the sending of e-mails. SignoSign/Universal uses the Javamail API for this purpose.
The hostname of the SMTP server that is to be used.
smtp.host
The user name that is used for the SMTP server.
smtp.user
The password that is used for the SMTP server.
smtp.password
The display name that is displayed in an e-mail as the sender in place of the e-mail address.
smtp.userDisplayName
Determines whether the Javamail API is authenticated on the basis of the AUTH command.
smtp.auth
Determines whether a TLS-secured connection is established before the login data are sent.
smtp.startTlsEnable
The port that is used for SMTP.
smtp.port
An e-mail address that is used as sender for all e-mails sent by signoSign/Universal.
smtp.sender
The long term validation (LTV) settings for signatures.
A signature without LTV requires an online service of the certificate issuer in order to check the validity of the signature certificate. The validity of an LTV signature can also be checked if the service is not available. All information on validation is created at the time of signing and saved in the PDF.
signoSign/Universal will automatically use LTV if all conditions are fulfilled. The data required for this are mainly created from the certificate chain of the signature certificate. To prevent unnecessary downloads of the chain, the keystore of the certificate should also contain its certificate chain.
Determines whether LTV is required for a signature.
ltv.required
The settings for the time stamp authority (TSA) service.
The optional time stamp authority (TSA) service that is used to create a reliable timestamp for the signature. If no service is specified, the local time of the signoSign/Universal server is used.
User name and password are used for the basic authentication. An SSL authentication via certificate (SSL peer authentication) should be set central via the security settings of JVM via system property javax.net.ssl.keyStore.
javax.net.ssl.keyStore
The URL of the TSA service.
tsa.host
The optional user name for basic authentication at the service.
tsa.user
The password for basic authentication.
tsa.password
The following settings determine the behaviour of jobs in signoSign/Universal.
Please note: If documentLifeTimeInterval is set, documentLifeTimeCreation and/or documentLifeTimeModification must also be set. The same applies vice versa. The document is always deleted at the earliest possible point in time.
This setting determines the interval at which a check is performed to see which documents need to be deleted.
cron
jobs.documentLifeTimeInterval
jobs.documentLifeTimeInterval=0 15 10 * * ?
This setting determines the duration in days that must have passed since the document was created at the time of the check in order for a document to be deleted.
>
jobs.documentLifeTimeCreation
This setting determines the duration in days that must have passed since the document was last edited at the time of the check in order for a document to be deleted.
jobs.documentLifeTimeModification
The following settings determine the behaviour of the ‘signoSign/Universal Document Pool’ application.
The preferred service provider for sending text messages.
SIPGATE
SMS77
pool.preferredSmsService
Specifies whether an e-mail is sent via the set SMTP server of transferred to the local e-mail client via mailto .
mailto
SERVER
CLIENT
pool.sendMailMethodForDocumentSharing
Specifies whether the same method can be used for sharing TAN and recipients.
pool.allowSameSharingAndTanMethod
Decides whether or not the user settings feature is displayed in the pool.
pool.showUserSettings
Decides whether or not the document types feature is displayed in the pool.
pool.showDocumentTypes
signoSign/Universal uses an external service for sending text messages. This section describes the setting of the supported services that you can use. See also pool.preferredSmsService
The following settings are used to call the text message service of sms77 e. K.
The API key for authentication of the text message service provider. You can create and display this key in the development area of sms77.io.
sms77.apiKey
The following settings are used to call the text message service of sipgate GmbH.
The personal access token (PAT) for authentication of the text message service provider. The token requires the scope sessions:sms:write for sending text messages and the scope sms:read for reading out the extension this is to be used.See also https://www.sipgate.io/rest-api/authentication#personalAccessToken.
sipgate.token
The token ID of the personal access token for authentication of the text message service provider.
sipgate.tokenId
The ID of the extension from which the message is sent.See also https://github.com/sipgate-io/sipgateio-sendsms-java#web-sms-extensions.
sipgate.smsId
The following settings are used to configure the authentication of users. As standard, the authentication mechanism of the servlet container or application servers is used. Alternatively, Single Sign On (SSO) with OpenID Connect (OIDC) can be used.
Please note:
auth.type = REALM
Specifies the type of authentication.
REALM
OIDC
auth.type
If this setting is activated, the user name is case-insensitive. Users "John Smith" and "john smith" share the same data in the system, such as documents. Both users can log in, however, as long as the log-in mechanism allows this, but signoSign/Universal uses the lower case user name internally.
This setting should be activated if the log-in mechanism ignores upper/lower case.
auth.realm.forceLowerCaseUsername
The URL of the OpenID provider metadata of the identity server . The URL generally ends with /.well-known/openid-configuration .
auth.oidc.discoveryUrl
The identifier that signoSign/Universal is registered with for the identity server. An application that uses OpenID Connect must be registered with the identity server. This identifier will then be issued and it is needed for the authorisation code flow.
auth.oidc.clientId
The secret specified with the identity server that signoSign/Universal uses for the authorisation code flow.
auth.oidc.clientSecret
The scope values that are used for the authorisation code flow. For the fundamental functionality, OpenID Connect requires the value openid .
auth.oidc.scope
openid profile email
The value (claim) in the token from which the user name is taken. If the value is not present or is empty, it is not possible to log in to signoSign/Universal.
auth.oidc.usernameClaim
email
The value (claim) in the token from which the user roles are taken. If the value is not present in the token, is empty or is not a JSON array, it is not possible to log in to signoSign/Universal.
auth.oidc.rolesClaim
roles
From the perspective of the identity server, signoSign/Universal is a resource. The OAuth access token is always issued for a resource. This setting can be used to specify a list of valid resources. The signoSign/Universal REST API will only accept the access token if its aud claim value is included in this list. The check is deactivated if no value has been specified.
Important If the signoSign/Universal REST API is availably publicly, specifying this list is strongly recommended for security reasons. The public REST API should always check whether an access token was issued for the API.
auth.oidc.tokenAudience
A list of additional trustworthy access token issuers. The issuer from the OpenID provider metadata is always trustworthy. The signoSign/Universal REST API will only accept access tokens if their iss claim value is known.
auth.oidc.tokenIssuer
To sign a document in signoSign/Universal using remote signature, the service signotec signoRemoteSignature is required. The connection to the service is established with the following settings. If the settings are not configured, remote signatures are deactivated.
This setting determines the service that is to be used for the remote signature.
remoteSignature.service.baseUrl
This setting sets the licence key for using the signoRemoteSignature service.
remoteSignature.service.licenseKey
The following settings configure the logging of the signoSign/Universal application. See also web.clientDebugLogging.
If no external settings are used, the Java Logging API (java.util.logging) is used to log to the console with level INFO by default.
############################################################ # Global properties ############################################################ # "handlers" specifies a comma separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. handlers = java.util.logging.ConsoleHandler ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ de.signotec.level = INFO org.apache.pdfbox.level = SEVERE org.jboss.weld.level = INFO
This property can be used to specify a local path of an external configuration file for the Standard Java Logging API (java.util.logging). If this property is not set or if it is empty, the default configuration file logging.properties contained in signoSign/Universal is used.
The following example expands the standard settings by logging to a file with the java.util.logging.FileHandler .
############################################################ # Global properties ############################################################ # "handlers" specifies a comma separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler ############################################################ # Handler specific properties. # Describes specific configuration info for Handlers. ############################################################ java.util.logging.FileHandler.level = INFO java.util.logging.FileHandler.pattern = ../logs/signoSignUniversal_%g.log java.util.logging.FileHandler.limit = 5000000 java.util.logging.FileHandler.count = 20 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.FileHandler.append = true java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ de.signotec.level = INFO org.apache.pdfbox.level = SEVERE org.jboss.weld.level = INFO
logging.config.file
In order to run the application on a Tomcat server with Redis as the Session Storage, specific configuration steps are required. This configuration needs to be done both within the application itself and on the Tomcat server. Please note that this feature is currently in an experimental phase and may be subject to changes.
Providing configuration for the application: It is necessary for the application to have a configuration file provided in either JSON or YAML format. This file contains specific settings for the application, including information for connecting to the Redis instance. Documentation on the content of the configuration file can be found here: https://github.com/redisson/redisson/wiki/2.-Configuration#272-sentinel-yaml-config-format.
Tomcat configuration: The configuration for Tomcat is best described here: https://redisson.org/articles/redis-based-tomcat-session-management.html
This setting refers to a configuration file for the Redisson API, which can be specified using a relative or absolute path. The configuration file defines the settings and parameters for the Redisson library. Detailed documentation on the file format and available configuration options can be found at the following link: https://github.com/redisson/redisson/wiki/2.-Configuration/.
redission.YamlConfigFile
redission.jsonConfigFile
External systems can be informed about specific events in signoSign/Universal via Webhooks. For each type of event, a URL can be defined, which will be called upon the occurrence of the event.
For more detailed information about Webhooks, please refer here.
This event is triggered when a save operation has been performed. This includes Remote-Saving and the completion of shared documents.
The EventType of the event is: DOCUMENT_UPDATED
DOCUMENT_UPDATED
webhooks.documentUpdatedEndpoint
This event is triggered when a document is shared or when the operation is created.
The EventType of the event is: DOCUMENT_SHARED
DOCUMENT_SHARED
webhooks.documentSharedEndpoint
This event is triggered when a Workflow Process is started.
The EventType of the event is: WORKFLOW_PROCESS_STARTED
WORKFLOW_PROCESS_STARTED
webhooks.workflowProcessStartedEndpoint
This event is triggered when a Workflow Process is ended. It doesn't matter if the process is aborted or completed.
The EventType of the event is: WORKFLOW_PROCESS_ENDED
WORKFLOW_PROCESS_ENDED
webhooks.workflowProcessEndedEndpoint
Open signosignuniversal-[PLATTFORM]-[VERSION].ear/lib/ssu-business-[VERSION].jar/pdfFont-realFont.properties (version for application server) or signoSignUniversal.war/WEB-INF/lib/ssu-business-[VERSION].jar/pdfFont-realFont.properties (version for servlet container).
This property file allows font names that are used in PDF documents but cannot be displayed in browsers or apps to be mapped. This occurs either when short forms of standard font names specific to PDF are used in the PDF document (these are already mapped), or when font names have been used that browsers and apps do not recognise when the PDF was generated (also includes an example).
A document that is saved in signoSign/Universal can be shared with external persons using the sharing case function. The person does not need to be registered in signoSign/Universal.
A sharing case is an element that is permanently saved in the database. It can be created, edited and deleted. A sharing case is linked to a document. Any number of sharing cases can be created per document.
If a sharing case exists for a document, then the document can be opened, edited and saved in signoSign/Universal Viewer without authentication. Access can be password protected (optional).
string
object
signoSign/Universal Viewer offers a toolbar button with which a sharing case can be created for the open document. The visibility of the button is defined using the web.sharingButtonVisibility setting. The button is displayed as disabled if the sharing case function is disabled using the persistence.documentSharing setting.
Sharing cases can be created, edited and deleted using the REST API sharingcases resource. Sharing cases created by signoSign/Universal Viewer can also be edited.
A sharing case is opened with a special URL. The URL can be called any number of times and is valid until the sharing case has been deleted or finalised.
The URL for the sharing case can be called via the Rest API and takes into account the ssmPublicUrl setting during generation.
Because there may be changes in the structure of the URL, it is always recommended to call the URL via the Rest API. If the Rest API is not intended to be part of an integration, however, the structure of the URL is documented here. Note that such an integration can cause a greater migration workload in the event of updates.
URL format:[HOST]/signoSignUniversal/webvieweropen?action=sharedviewer&u=[USERNAME]&s=[ACCESSID]
u=john_doe
accessId
s=myAccessId_1
A shared document is considered finalised once the related link has been called, changed and saved. The time at which the shared document was saved is recorded.
If SMTP settings have been saved and the user name of the sharing user corresponds to a valid e-mail address, the user will be sent an e-mail informing them that the process has been finalised.
A document type is a group of documents that are always handled in the same way by signotec software. This includes automatically inserting signature fields when loading a document, for example. These types of document properties can be defined either centrally through document configurations or decentrally by inserting SGN keywords into a PDF.
SGN documents are a file type developed by signotec. In terms of technical structure, it is a valid PDF in which a character string with a certain syntax is written in its Keyword field of the metadata.
A certain application behaviour can be defined decentrally in individual PDF documents by inserting SGN keywords. The signotec keywords (SGN keywords) listed below are currently evaluated by signoSign/Universal.
It is possible to control the behaviour of signoSign/Universal using the SGN keywords. These need to be entered in the Keywords field in the SGN/PDF documents to be signed. This field appears in every PDF document and can be freely filled.
String
/sgnsignatures {3} /sgnsignature_1 {1 0 10 10 150 30} /sgnsigner_1 {customer} /sgnsignature_2 {2 0 166 167 394 238} /sgnsigner_2 {consultant} /sgnsignature_3 {1 1 266 267 494 338} /sgnsigner_3 {tester}
The sgnsignatures keyword has the following meaning: If signature fields with a fixed position (inserted by means of sgnsignature_<N> ) are used, the total number of entered signature fields/signature positions must be specified here. If signature fields are defined using search text (inserted by means of sgnsignature_<N> or sgnsignaturekw_r<N> ), the number of sgnsignaturekw_ or sgnsignaturekw_r keywords used must be specified here. This is necessary because the total number of signature fields resulting from the search terms is unknown at the beginning of the signature capture process.
sgnsignatures{3}
This keyword defines a signature field to be signed. It enables the electronic signing of a SGN/PDF document with a digital signature in a defined position and on a defined page. Up to N signatures can be inserted into the document. N must be a number and can currently be a maximum of 30.
/sgnsignature_1 {1 0 379 699 549 730} /sgnsignature_2 {2 0 377 630 549 650} /sgnsignature_3 {6 0 277 530 449 550}
This keyword allows the displayed title line to be changed in the relevant signature capture dialog box. The assignment to the related signature field is made via the N value.
Example showing how to change the title line when inserting the first and third signature:
/sgnsigner_1 {Please sign here Mr John Doe} /sgnsigner_3 {Please sign here Ms Jane Doe}
This keyword defines a signature field without a fixed position. Its position is defined using a text contained in the document. This text is searched and the signature field is inserted at the first hit location. It is offset relative to the hit location.
Example of a signature field to be created using search terms.
/sgnsignaturekw_1 {0 -10 -20 80 40 Requester:}
This keyword defines an unspecified number of signature fields without fixed positions. Their positions are defined by the hit locations of a text in the document. This text is searched and the signature field is inserted at every hit location. All signature fields are offset by the same values relative to the hit locations.
The structure and documentation of the parameters are identical to those of the keyword sgnsignaturekw_N and can be imported from there.
As well as the SGN keywords, which are used to define information relating to a desired behaviour in a document decentrally, the document configuration also enables the program to define these types of settings via the REST web service or centrally in a configuration file.
The name and the location of the configuration file is defined in the settings. If a path to a configuration file has been defined and this file is missing, it will still not lead to an error message. The file must only be populated with a valid JSON structure if it exists. Otherwise, an error will occur when the application starts.
The document configuration file must contain a JSON array. This contains JSON structures, each of which contains a separate document configuration. When a document is loaded, all available configurations are iterated through and the first one that meets all of the conditions is applied to the document to be loaded.
The file is read when the application is started. signoSign/Universal will not start if the content of the file does not contain a valid JSON array or a JSON element in the array contains an error when the application is launched. Every individual attribute that a document configuration can contain is described below.
[ { /* doc config 1 */ }, { /* doc config 2 */ } ]
The JSON structure transferred to the application is converted as is into an object that can be used by signoSign/Universal. All possible document configuration attributes are listed below. However, distinctions are still made between selection conditions and actual configurations for the attributes.
A document configuration contains attributes that act as conditions as to whether or not a configuration is applied to a document. Any number of condition attributes can be specified in a configuration. A configuration is only then applied to a document if all the conditions for a document are met.
Example: A configuration that is applied to a document, the transferred file name of which begins with "abc".
[ { "documentFileNamePattern": "abc*" } ]
Example: A configuration that is applied to a document, ID of which begins with "1".
[ { "documentIdPattern": "1*" } ]
Example: A configuration that is applied to a document with the ID 2.
[ { "documentIdTarget": "2" } ]
[ { "documentOriginTypes": 9 } ]
These are attributes of the configuration that actually influence how the document is handled in the Viewer.
Example: Shows the user "User1" the signature field with the tab order 0 on page 1 and the signature field with the name "SIGNATURE1" when the document is loaded
[ { "signatureFieldMask": { "User1" : "(1,0);SIGNATURE1" } } ]
"@type":"dynamic",
"@type":"static",
"dynamic", "static"
1, 0
Integer > 0
Integer >= 0
true, false
Example: Two signature fields are inserted when the document is loaded. A static field on page 1 and a dynamic field where the text "searchtext" occurs.
[ { "signatureFields":[ { "@type":"static", "option":0, "signer":"signer", "posX":500, "posY":20, "width":200, "height":50, "pageNumber":1 }, { "@type":"dynamic", "option":0, "signer":"string", "offsetX":20, "offsetY":45, "width":200, "height":50, "keyword":"searchtext", "recursive":false } ] } ]
"signature", "checkbox"
Example:
[ { "formFieldProperties":[ { "@type":"signature", "fieldName":"string", "tabOrder":0, "pageNumber":0, "shown":true } ] } ]
Please note: Check boxes connected to a signature field in this way are no longer inserted into the document in a destructive way when it is saved. Check boxes connected to a signature are saved incrementally together with the corresponding signature. In addition, the form field information of this type of check box is also included in the encrypted signature data themselves.
Please note: If this check box is also configured for entry on a hardware pad, the validation process to determine whether the corresponding check box is ticked only runs after confirmation has been given in the dialog box on the hardware pad.
If the checkRequiredToSignSignatureField value has been defined, this value is displayed as a notification in the Viewer and the signing process is cancelled if the corresponding check box has not been ticked.
An index that determines the sequence for displaying the check box on the pad.
[ { "formFieldProperties":[ { "@type":"checkbox", "fieldName":"CheckBoxFormFIELD", "tabOrder":0, "pageNumber":0, "padSelectionSignatureField":"signFIELD", "padSelectionText":"Lorem ipsum dolor sit amet, consetetur.", "checkRequiredToSignSignatureField":"signFIELD", "checkRequiredToSignSignatureFieldText":"Lorem ipsum dolor sit amet", "showIndex":0 } ] } ]
In this section of the document configuration, you can influence the behavior of documents during sharing or in a shared state. The following attributes are available.
[ { "sharingCaseProperties":[ { "completionCallbackURL":"https://signotec.com" } ] } ]
signoSign/Universal has a REST API for integration. This section will focus less on the technical application of the API and more on the underlying concept.
A list of all available API calls plus structure and documentation can be found in the Swagger UI.
The individual areas will be discussed in greater detail later.
This technical documentation explains the terms and concepts related to instance tokens, sessions, containers, viewers, and access URLs.
Instance Token: An instance token is a unique string, similar to an API key. It needs to be provided as an authorization method with each request to a protected REST endpoint and serves as an access key to a container.
Container: A container describes the context of a user on the server. Access to a container can be independent of a session using the instance token. In most cases, it is assumed that a single viewer exists in a container, but it is also possible to have multiple viewers in a container.
Session: A session describes the browsing context of a browser with the server. It represents the interaction of a user with the application during a specific period of time.
Viewer: Viewers are always part of a container. They provide a context in which a document can be loaded. In most use cases, it is assumed that a container contains a single viewer. However, it is possible for a container to potentially have multiple viewers.
Loading a Document: A document is always loaded into a viewer. The document remains loaded until it is actively unloaded, the instance token is revoked, or the associated session expires.
Access URL: An access URL is a one-time usable URL that connects a session with a viewer container. It is always issued for a specific viewer. By accessing an access URL, the used session is automatically associated with the corresponding viewer container. An access URL should be created immediately before use as it is automatically destroyed after use to ensure maximum security.
An instance token is an important access key to the context of a user on the server. To ensure smooth and secure operation, we recommend the following best practices when working with instance tokens:
Creation of Instance Tokens: An instance token should always be created for a session. It is advisable to generate an instance token for each session to enable clear mapping.
Consistent Mapping of Instance Tokens and Sessions: A session should not be associated with different instance tokens. It is important that a session uses only one instance token at a time during its runtime to avoid inconsistent states or access issues.
Active Unloading of Documents: After completing an operation, documents should be actively unloaded to release resources and reduce memory consumption. This can be done either by manually unloading the document or by revoking the associated instance token.
By following these recommendations, you can ensure consistent and efficient use of instance tokens and avoid potential issues related to session management and document loading.
If a Viewer is not removed by revoking the instancetoken, the instancetoken and the associated Viewer may continue to be used. In multi-Viewer scenarios, the Viewers should ideally be created by one instancetoken, instead of generating an instancetoken for each Viewer.
As soon as a Viewer has been instantiated, it can be configured and a document can be loaded. The preparation can be divided into two areas:
Please note: A Viewer can only ever have one document loaded at a time. As soon as another document is loaded, the old document is overwritten together with any document-related settings.
Please note: A server session can open any number of Viewers of one instancetoken. The Viewers of a second instancetoken can only be opened once all Viewers of the first instancetoken have been closed.
Does not work when using a custom persistence implementation.
The API allows you to manage persistent documents in the configured database. Documents in the database can be loaded directly into the Viewer using their numeric ID.
Shared documents can also be managed via the API.
Does not work when using a custom persistence implementation or a global keystore.
signoSign/Universal requires two difference certificates; one for digital signatures and one for the encryption of biometric data. These certificates must be made available to signoSign/Universal in keystores.
Purposes of certification: Assigning a certificate to a user always fulfils a certain purpose. Assigning a certificate can fulfil one of the following purposes:
Please note: If a user is not assigned any certificates, signoSign/Universal creates the relevant certificates itself if a certificate is required.
Some functions have an ownerId parameter. This parameter allows functions to be executed in the name of this user. For example, user A can download a document from user B. However, this is only possible if user A has both the ssu-user role and the ssu-admin role.
If the ownerId parameter is left empty, it will be assumed that this value is the name of the user making the request. An access violation occurs if a user without the ownerId role transfers the parameter and this does not match the name of the user performing the action.
Information on a document can be requested as soon as it has been loaded in the Viewer.
The resource GET /viewer/document/information is used for this purpose.
In individual cases, the REST API uses proprietary codes in addition to standard codes to enable special cases to be handled.
signoSign/Universal makes it possible to automate workflows with the resource REST API Resource Workflows. A workflow and the data used in it are specified in a template (blueprint) which can then be started any number of times.
A blueprint defines a complete workflow and the data processed within it. A newly created workflow is empty and must be filled with steps. It is then possible to start the blueprint. Every start creates a process. Subsequent changes to the blueprint have no effect on the processes. Deleting a blueprint deletes the steps and all processes. Blueprints that are linked to an active process cannot be deleted.
The blueprint steps define what actions are to be performed and in what sequence. Steps can be performed sequentially, in parallel or in a mixture of the two variants.
When a step is created, its type specifies the type of action. The REST API provides an endpoint for each type.
Indices are used to define the start sequence for the workflow steps. Each step contains an attribute stepIndex and nextStepIndex.
Workflow steps are linked with documents by means of folders ( DocumentFolder ). A folder can contain any number of documents and a document can only be linked to one folder.
As standard, an empty folder is created for each step that involves processing documents. If a document is allocated to the step, a copy of the document is stored in the folder. If two steps are to process the same document, they must use the same folder. The folder can be specified either when the step is created or later on when the document is linked. In each case, the parameter documentFolderId is used.
A workflow process represents a blueprint that has been started. For each blueprint step, the process contains an event with a copy of the work data of the blueprint step. Subsequent changes to the blueprint do not affect the process or its events.
The REST API can be used to start, query and delete processes. Deletion removes the process and its events, including the work data, such as the documents. Active process cannot be deleted.
Remote saving makes it possible to send a loaded document directly to another system via HTTP. The URL can be set via PATCH /viewer/configuration with the parameter saveUrl and will then change the saving function in the Viewer. Information about the status of the signature fields is attached with the following URL parameter when a request is made.
The following points must be taken into account by the receiving side:
{ "remoteSavingResponse" : "REMOTE_SAVING_SUCCESSFUL" }
{ "remoteSavingResponse" : "REMOTE_SAVING_FAILED" }
{ "remoteSavingResponse" : "REMOTE_SAVING_FAILED", "customizedSavingErrorMessage" : "my custom error message" }
Setting cookies to communicate with third-party systems is described here.
Certain situations require signoSign/Universal to send requests to third-party servers. Remote saving is a specific example of this. This is when a document that is to be saved is uploaded to another server as a multipart upload.
The REST API allows cookies to be attached to a Viewer (POST /viewer/cookie) that are also sent in all requests to other systems. Only cookies that are defined for the domain in the cookie are sent.
All cookies are stored until they are explicitly deleted or the instancetoken to which they belong is revoked.
signoSign/Universal is often embedded in an existing web application as iFrame. An example of this can be found in when the application is running in our REST API Showcase, if devTools are activated. For this type of integration, signoSign/Universal provides public Javascript methods and events, which are also documented in this section.
If the surrounding web application and signoSign/Universal are operated under the same domain, an iFrame integration should be straightforward. If problems do occur in this scenario, however, the ssmPublicUrl setting may not be set correctly; also bear in mind that most browsers do not permit the mixing of HTTP content on HTTPS pages (and vice versa).
If there are problems with integration, in many cases the browser’s Javascript console can provide information about the cause.
If the surrounding web application and signoSign/Universal are not operated on the same domain, the embedding of signoSign/Universal as iFrame must be permitted at HTTP protocol level. This means that the headers Access-Control-Allow-Origin and Access-Control-Allow-Methods must be added to every HTTP response.
These HTTP headers can be added either by configuring the server or by activating the integrated CORS filter. The configuration of the CORS filter is already included in the web.xml of signoSign/Universal, but it is commented out. The web.xml is located in the WEB-INF folder of the WAR or EAR.
The authentication to signoSign/Universal is specified in cookies. For operation in the iFrame, however, the signoSign/Universal cookie is requested from the surrounding web application. If the surrounding web application is running under a domain other than signoSign/Universal, this cookie must explicitly allow the access of external domains.
This behaviour is defined with the SameSite attribute of a cookie and must have the value Lax for iFrame operation. This can generally be configured on the server that is used.
Specially for Apache Tomcat, a context.xml is supplied in the META-INF folder of the signoSign/Universal WAR. The SameSite attribute is preset to Strict.
If signoSign/Universal is called in an iFrame from a surrounding application, there are a number of publicly documented functions in JavaScript code that can be executed via the iFrame element.
For example, the following snippet of code executes the save function:
iframe = document.getElementById("iframe"); iframe.contentWindow.viewerFunctions.saveDocument();
The Viewer provides the following functions:
logout
fitPageToStandardDocumentSize
fitPageToScreenHeight
fitPageToScreenWidth
showThumbnails
startSharingCaseCreation
showSummarySignaturesDialog
startSigningProcess
addSignatureField
insertNote
saveDocument
showNextPage
showPrevPage
showSaveBeforeLeaveDialog
showPage
If signoSign/Universal is embedded in another application as an iFrame, the surrounding application can be informed of certain events.
Depending on the event, the behaviour of signoSign/Universal can be influenced by calling the preventDefault method of the object transferred to the event within the defined event handler.
iframe = document.getElementById("iframe"); iframe.contentWindow.addEventListener("SSUMessageEvent", function(e) { console.info("SSUMessageEvent"); console.info(e.detail.severity); console.info(e.detail.message); });
Executed when signoSign/Universal displays information or an error message.
Default behaviour: signoSign/Universal displays the message that appears as a separate dialog box.
PreventDefault(): The message that appears is not displayed in a dialog box in signoSign/Universal. The surrounding application can handle the message itself.
PreventDefault():
"ERROR", "INFO"
Executed when a signature is captured and sent to the server.
true / false
Executed as soon as the save process has been carried out
Executed when form fields changed by the user are synchronised with the backend.
Default behaviour: All user entries are transferred to the server and written in the server-side representation of the document.
PreventDefault(): Prevents synchronisation between the frontend and backend. The entries are not inserted into the document.
Executed as soon as a connection to a signature device has been opened
Executed as soon as a connection to a signotec signature device has been closed.
Executed as soon as the status of the opened pad changes. A signature device can have one of the following statuses:
"READY", "PREPARING", "CANCELLING", "RETRYING", "CONFIRMING", "STOPPED", "PAD_CERT_VALIDATION_FAILED", "SHOW_DOCUMENT_ON_PAD_RUNNING", "NO_PAD_FOUND"
Triggered once a signature process has been started.
Default behaviour: The signing dialog box is opened.
PreventDefault(): Opening of the signing dialog box is prevented.
Triggered when a form field is focused on.
Default behaviour: The addressed form field is focused on.
PreventDefault(): Focusing on the form field is prevented.
"text", "area", "combobox", "listbox", "checkbox"
Triggered once the document is ready/has been loaded in the Viewer. No parameters are transferred to this event.
Triggered if another page in the document is changed to.
Webhooks are a way to be notified about specific events in signoSign/Universal. To achieve this, a URL is provided that signoSign/Universal calls when an event occurs. The content of each webhook call is a JSON object that maps the context in which the event occurred. Depending on the context, the amount of information transmitted varies. For example, when a user saves a document, no SharingCase information is transmitted. However, if the save is part of a Workflow, the Workflow information is transmitted.
In the webhooks section of the settings, you can define a separate URL for each possible event.
{ "Event": { "TimeStamp": Date as string(yyyy-MM-dd'T'HH:mm:ss.SSSXXX), "EventType": string, "Software": { "Name": "SignoSign/Universal", "Version": string }, "User": { "UserName": string }, "EventData": { "Document": { "DocumentName": string, "DocumentId": number, "SignatureFields": number, "MandatoryFields": number, "SignedSignatureFields": number, "SignedMandatoryFields": number, "FormFields": [ { "Name": string, "Value": string, "Mandatory": boolean }, ] }, "SharingCase": { "SharingCaseId": number, "AccessId": string }, "Workflow": { "ProcessId": string } } } }
When a signature is being processed, the captured data are encrypted and the document is signed after the signature has been inserted. The encryption requires a public-key certificate containing a public key. A complete key pair is required for the signing, that is, a public key certificate, its certificate chain and the private key matching the public key of the certificate.
A certificate can be used globally for all users, generated automatically per user or managed flexibly via the REST API. The certificates and keys must be made available to signoSign/Universal for the operations named above and saved by signoSign/Universal. However, signoSign/Universal cannot be used to manage certificates and keys as it only provides limited access to the saved data, if at all.
The certificates and keys are loaded via the Java Cryptography Architecture (JCA). All formats that can be loaded with the class java.security.KeyStore can also be processed by signoSign/Universal. Loading a certificate generally requires the following settings:
To use an encryption certificate and a signature certificate for all users globally, the useCertificateDataProperties key must be enabled in the server settings and defined in the certificates’ sources.
persistence.useCertificateDataProperties = true persistence.keystoreSigning = /var/ssu/global-store.jks persistence.signingAlias = signingCert persistence.signingKeyStoreType = JKS persistence.signingKeyStorePassword = storePassword persistence.signingprivatekeypassword = keyPassword persistence.keystoreBiometric = /var/ssu/global-store.jks persistence.biometricAlias = encryptionCert persistence.biometricKeyStoreType = JKS persistence.biometricKeyStorePassword = storePassword
Standard certificates The global keystores signoSign/Universal uses by default are located next to the Properties file for the server settings. The keystores contain a key pair and a self-signed demo certificate for the digital signature and a certificate for encrypting the biometric data that is created and managed by a notary. See also the Certificates section. The biometricalias certificate from the keystoreBiometric.jks keystore is used for encryption. The signingalias key pair from the keystoreSigning.jks store is used for the signing. The password for both keystores is password .
The demo certificate and its keys are only pre-set to Evaluation by signoSign/Universal and must be replaced by trusted data for live use!
[WEB-APP-ROOT]/WEB-INF/classes/keystoreBiometric.jks [WEB-APP-ROOT]/WEB-INF/classes/keystoreSigning.jks [WEB-APP-ROOT]/ssu_web-x.x.x.x.war/WEB-INF/classes/keystoreBiometric.jks [WEB-APP-ROOT]/ssu_web-x.x.x.x.war/WEB-INF/classes/keystoreSigning.jks
If neither global certificates nor certificates configured via the REST API are used, signoSign/Universal will generate a keystore with encryption and signature certificates for each user.
A JCA/JCE provider from the manufacturer is required to use a hardware security module (HSM). The provider is normally located in a JAR library, and signoSign/Universal must be given access to it. signoSign/Universal automatically uses the functionality of the provider if the name specified by the provider is used as the keystore type.
Configuration example An example for the server settings if
persistence.useCertificateDataProperties = true persistence.keystoreSigning = /var/ssu/customStore persistence.signingAlias = signingCert persistence.signingKeyStoreType = custom.store persistence.signingKeyStorePassword = persistence.keystoreBiometric = /var/ssu/customStore persistence.biometricAlias = encryptionCert persistence.biometricKeyStoreType = custom.store persistence.biometricKeyStorePassword =
If a version is updated to with a greater second version number digit, it may be necessary to make changes to the database schema. For such cases, a command line tool is provided to which the currently used version, the version that is being migrated to and the connection data for the database are sent. The program then makes the changes to the database successively up to the desired version.
The tool is run as main class of the migration-tool-[VERSION].jar. This jar is located in the subfolder migration of the delivery package.
To run the tool, the following command can be used (Windows OS):
The tool queries all required parameters before the start. These are, in sequence:
Further information on using the migration tool:
To check the accessibility of the application, the end point:
[HOST]/signoSignUniversal/rest/health
can be addressed. It returns "HTTP200/ OK" if the application is not available.
HTTP200/ OK