Skip to content

Commit a9a2339

Browse files
committed
Merge remote-tracking branch 'origin/master' into provide-cert-chain
2 parents f81a6bb + de54040 commit a9a2339

File tree

249 files changed

+9422
-2970
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

249 files changed

+9422
-2970
lines changed

.github/FUNDING.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22

33
custom: ['https://paypal.me/emmanuelbourg']
44
github: ebourg
5+
buy_me_a_coffee: ebourg

.github/workflows/build.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ jobs:
5959
!jsign-core/target/jsign-core-*-javadoc.jar
6060
!jsign-core/target/jsign-core-*-sources.jar
6161
!jsign-core/target/jsign-core-*-tests.jar
62+
jsign-core/target/jsign-crypto-*.jar
63+
!jsign-core/target/jsign-crypto-*-javadoc.jar
64+
!jsign-core/target/jsign-crypto-*-sources.jar
65+
!jsign-core/target/jsign-crypto-*-tests.jar
6266
6367
- name: Coverage report
6468
if: ${{ matrix.java == '17' }}

README.md

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
1-
Jsign - Java implementation of Microsoft Authenticode
2-
=====================================================
1+
Jsign - Authenticode signing tool in Java
2+
=========================================
33

44
[![Build Status](https://github.com/ebourg/jsign/actions/workflows/build.yml/badge.svg?branch=master&event=push)](https://github.com/ebourg/jsign/actions/workflows/build.yml)
55
[![Coverage Status](https://coveralls.io/repos/github/ebourg/jsign/badge.svg?branch=master)](https://coveralls.io/github/ebourg/jsign?branch=master)
66
[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
77
[![Maven Central](https://img.shields.io/maven-central/v/net.jsign/jsign.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22net.jsign%22)
88

9-
Jsign is a Java implementation of Microsoft Authenticode that lets you sign
10-
and timestamp executable files for Windows, Microsoft Installers (MSI), Cabinet
11-
files (CAB), Catalog files (CAT), Windows packages (APPX/MSIX), Microsoft
12-
Dynamics 365 extension packages, NuGet packages and scripts. Jsign is platform
13-
independent and provides an alternative to native tools like signcode/signtool
14-
on Windows or the Mono development tools on Unix systems.
9+
Jsign is a versatile code signing tool that allows you to sign and timestamp Windows
10+
executable files, installer packages and scripts. Jsign is platform independent
11+
and provides an alternative to native tools like signtool on Windows or the Mono
12+
development tools on Unix systems. It's particularly well-suited for signing
13+
executable wrappers and installers generated by tools such as NSIS, msitools,
14+
install4j, exe4j or launch4j. It emphasizes on seamless integration with cloud key
15+
management systems and hardware tokens.
1516

16-
Jsign comes as an easy-to-use task/plugin for the main build systems (Maven,
17-
Gradle, Ant). It's especially suitable for signing executable wrappers and
18-
installers generated by tools like NSIS, msitools, install4j, exe4j or launch4j.
19-
Jsign can also be used programmatically or standalone as a command line tool.
17+
Jsign is available as a command line tool for Linux, macOS and Windows, as a task/plugin
18+
for various build systems (Maven, Gradle, Ant, GitHub Actions), and as a Java library.
2019

2120
Jsign is free to use and licensed under the [Apache License version 2.0](https://www.apache.org/licenses/LICENSE-2.0).
2221

@@ -25,21 +24,25 @@ Jsign is free to use and licensed under the [Apache License version 2.0](https:/
2524
* Timestamping with retries and fallback on alternative servers (RFC 3161 and Authenticode protocols supported)
2625
* Supports multiple signatures per file, for all file types
2726
* Extracts and embeds detached signatures to support [reproducible builds](https://reproducible-builds.org/docs/embedded-signatures/)
27+
* Tags signed files with unsigned data (for user identification)
2828
* Hashing algorithms: MD5, SHA-1, SHA-256, SHA-384 and SHA-512
2929
* Keystores supported:
3030
* PKCS#12, JKS and JCEKS files
3131
* PKCS#11 hardware tokens ([YubiKey](https://www.yubico.com), [Nitrokey](https://www.nitrokey.com), [SafeNet eToken](https://cpl.thalesgroup.com/access-management/authenticators/pki-usb-authentication), etc)
3232
* Cloud key management systems:
3333
* [AWS KMS](https://aws.amazon.com/kms/)
3434
* [Azure Key Vault](https://azure.microsoft.com/services/key-vault/)
35-
* [DigiCert ONE](https://one.digicert.com)
35+
* [Azure Trusted Signing](https://learn.microsoft.com/en-us/azure/trusted-signing/)
36+
* [DigiCert ONE](https://www.digicert.com/digicert-one) / [DigiCert KeyLocker](https://docs.digicert.com/en/digicert-keylocker.html)
37+
* [GaraSign](https://garantir.io/garasign/)
3638
* [Google Cloud KMS](https://cloud.google.com/security-key-management)
3739
* [HashiCorp Vault](https://www.vaultproject.io/)
3840
* [Oracle Cloud KMS](https://www.oracle.com/security/cloud-security/key-management/)
3941
* [SSL.com eSigner](https://www.ssl.com/esigner/)
4042
* Private key formats: PVK and PEM (PKCS#1 and PKCS#8), encrypted or not
4143
* Certificates: PKCS#7 in PEM and DER format
42-
* Build tools integration (Maven, Gradle, Ant)
44+
* Automatic download of the intermediate certificates
45+
* Build tools integration (Maven, Gradle, Ant, GitHub Actions)
4346
* Command line signing tool
4447
* Authenticode signing API ([Javadoc](https://javadoc.io/doc/net.jsign/jsign-core))
4548
* JCA security provider to use the keystores supported by Jsign with other tools such as jarsigner or apksigner
@@ -49,19 +52,40 @@ See https://ebourg.github.io/jsign for more information.
4952

5053
## Changes
5154

52-
#### Version 6.1 (in development)
55+
#### Version 7.0 (in development)
5356

54-
* The Oracle Cloud signing service has been integrated
57+
* New signing services: HashiCorp Vault Transit (contributed by Eatay Mizrachi), Azure Trusted Signing, Oracle Cloud and GaraSign
5558
* Signing of NuGet packages has been implemented (contributed by Sebastian Stamm)
56-
* Jsign now checks if the certificate subject matches the app manifest publisher before signing APPX/MSIX packages
59+
* Commands have been added:
60+
* `timestamp`: timestamps the signatures of a file
61+
* `tag`: adds unsigned data (such as user identification data) to signed files
62+
* `extract`: extracts the signature from a signed file, in DER or PEM format
63+
* `remove`: removes the signature from a signed file
64+
* The intermediate certificates are downloaded if missing from the keystore or the certificate chain file
65+
* File list files prefixed with `@` are now supported with the command line tool to sign multiple files
66+
* Wildcard patterns are now accepted by the command line tool to scan directories for files to sign
67+
* Jsign now checks if the certificate subject matches the app manifest publisher before signing APPX/MSIX packages (with contributions from Scott Cooper)
68+
* The new `--debug`, `--verbose` and `--quiet` parameters control the verbosity of the output messages
5769
* The JCA provider now works with [apksigner](https://developer.android.com/tools/apksigner) for signing Android applications
70+
* RSA 4096 keys are supported with the `PIV` storetype (for Yubikeys with firmware version 5.7 or higher)
71+
* Certificates using an Ed25519 or Ed448 key are now supported (experimental)
5872
* The APPX/MSIX bundles are now signed with the correct Authenticode UUID
73+
* The signed APPX/MSIX files no longer contain a `[Content_Types].old` entry
5974
* The error message displayed when the password of a PKCS#12 keystore is missing has been fixed
6075
* The log4j configuration warning displayed when signing a MSI file has been fixed (contributed by Pascal Davoust)
6176
* The value of the `storetype` parameter is now case insensitive
77+
* The Azure Key Vault account no longer needs the permission to list the keys when signing with jarsigner
78+
* The DigiCert ONE host can now be specified with the `keystore` parameter
79+
* On Windows the YubiKey library path is automatically added to the PATH of the command line tool
80+
* Signing more than one file with the `YUBIKEY` storetype no longer triggers a `CKR_USER_NOT_LOGGED_IN` error
81+
* MS Cabinet files with a pre-allocated reserve are now supported
6282
* API changes:
83+
* The keystore builder and the JCA provider are now in a separate `jsign-crypto` module
6384
* The PEFile class has been refactored to keep only the methods related to signing
64-
* Switched to BouncyCastle LTS 2.73.5
85+
* The java.util.logging API is now used to log debug messages under the `net.jsign` logger
86+
* `Signable` implementations are now discovered dynamically using the ServiceLoader mechanism
87+
* `Signable.createContentInfo()` has been replaced with `Signable.createSignedContent()`
88+
* Switched to BouncyCastle LTS 2.73.6
6589

6690
#### Version 6.0 (2024-01-17)
6791

TODO.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,4 @@ TODO
33
- Verify signed files
44
- GUI
55
- Support private keys exported with PKCS#8
6-
- Support unauthenticated blobs
76
- Support generating MsiDigitalSignatureEx entries when signing MSI files (requires access to the streams metadata in POI)

docs/images/bg_hr.png

-943 Bytes
Binary file not shown.

docs/images/icon_download.png

-1.13 KB
Binary file not shown.

docs/images/sprite_download.png

-16.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)