Skip to content

Latest commit

 

History

History
164 lines (125 loc) · 6.48 KB

integrate_keyvault_JCA_provider_with_jarsigner.md

File metadata and controls

164 lines (125 loc) · 6.48 KB

Integrate KeyVault JCA provider with Jarsigner

This guide provides a straightforward approach to integrating the KeyVault JCA provider with Jarsigner, ensuring a seamless process for users.

Prerequisites

Before beginning, ensure you have the following:

Step 1: Download and Configure JCA Provider Jar

  1. Download the JCA Provider Jar.
  2. If you are using Java8, you need to add the JCA provider jar to the class path.
    1. Place the jar under the folder ${JAVA_HOME}/jre/lib/ext
      • img.jpg
  3. If you are using Java9 or higher, just place the jar in a folder that jarsigner can access.

Step 2: Prepare Azure Resources

Follow these steps carefully to achieve successful integration:

  1. Prepare your parameters
DATE_STRING=$(date +%H%M%S)
RESOURCE_GROUP_NAME=jarsigner-rg-$DATE_STRING
KEYVAULT_NAME=jarsiner-kv-$DATE_STRING
CERT_NAME=jarsiner-cert-$DATE_STRING
SERVICE_PRINCIPAL_NAME=jarsiner-sp-$DATE_STRING
  1. Create a resource group
az group create --name $RESOURCE_GROUP_NAME --location "EastUS"
  1. Create a key vault
az keyvault create --name $KEYVAULT_NAME --resource-group $RESOURCE_GROUP_NAME --location "EastUS"
  1. Get the key vault uri
KEYVAULT_URL=$(az keyvault show --name $KEYVAULT_NAME --query "properties.vaultUri" --resource-group $RESOURCE_GROUP_NAME -o tsv| tr -d '\r\n')
echo $KEYVAULT_URL

Note the output as kv_uri for later use.

  1. Add a certificate to Key Vault
az keyvault certificate create --vault-name $KEYVAULT_NAME -n $CERT_NAME -p "$(az keyvault certificate get-default-policy)"
  1. Create a Service Principal
SP_JSON=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME)

CLIENT_ID=$(echo $SP_JSON | jq -r '.appId')
CLIENT_SECRET=$(echo $SP_JSON | jq -r '.password')
TENANT=$(echo $SP_JSON | jq -r '.tenant')

echo "CLIENT_ID:"$CLIENT_ID
echo "CLIENT_SECRET:"$CLIENT_SECRET
echo "TENANT:"$TENANT

Note the appId and password from the output, you'll need them later.

  1. Get the objectId
OBJECTID=$(az ad sp show --id "$CLIENT_ID" --query id -o tsv | tr -d '\r\n')
echo $OBJECTID
  1. Assign Permissions to Service Principal:
az keyvault set-policy --name $KEYVAULT_NAME --resource-group $RESOURCE_GROUP_NAME --object-id $OBJECTID --secret-permissions get 

az keyvault set-policy --name $KEYVAULT_NAME --resource-group $RESOURCE_GROUP_NAME --object-id $OBJECTID --certificate-permissions get list

Step 3: Sign with Jarsigner

  1. Prepare Your Jar: Have the jar file you wish to sign ready.

  2. Execute Jarsigner: Use the Jarsigner tool with the KeyVault JCA provider to sign your jar file.
    You need to update the parameters with the actuall values.

    Parameter Description Example
    PARAM_YOUR_JAR_FILE_PATH The path to your jar file you wish to sign. /path/to/your/jarfile.jar
    PARAM_JCA_PROVIDER_JAR_PATH The path to the jca provider jar file. /path/to/your/azure-security-keyvault-jca-2.8.1.jar
    1. If you are using Java8, try to sign the jar using below command

      jarsigner   -keystore NONE -storetype AzureKeyVault \
                  -signedjar signerjar.jar ${PARAM_YOUR_JAR_FILE_PATH} "${CERT_NAME}" \
                  -verbose  -storepass "" \
                  -providerName AzureKeyVault \
                  -providerClass com.azure.security.keyvault.jca.KeyVaultJcaProvider \
                  -J-Dazure.keyvault.uri=${KEYVAULT_URL} \
                  -J-Dazure.keyvault.tenant-id=${TENANT} \
                  -J-Dazure.keyvault.client-id=${CLIENT_ID} \
                  -J-Dazure.keyvault.client-secret=${CLIENT_SECRET}
    2. If you are using Java9 or higher, try to sign the jar using below command

      jarsigner   -keystore NONE -storetype AzureKeyVault \
                  -signedjar signerjar.jar ${PARAM_YOUR_JAR_FILE_PATH} "${CERT_NAME}" \
                  -verbose  -storepass "" \
                  -providerName AzureKeyVault \
                  -providerClass com.azure.security.keyvault.jca.KeyVaultJcaProvider \
                  -J--module-path="${PARAM_JCA_PROVIDER_JAR_PATH}" \
                  -J--add-modules="com.azure.security.keyvault.jca" \
                  -J-Dazure.keyvault.uri=${KEYVAULT_URL} \
                  -J-Dazure.keyvault.tenant-id=${TENANT} \
                  -J-Dazure.keyvault.client-id=${CLIENT_ID} \
                  -J-Dazure.keyvault.client-secret=${CLIENT_SECRET}
  3. Check your output, the output may look like this

    • Alt text
    • Alt text

Step 4: Verify with Jarsigner

You can verify the signed jar using the following Jarsigner command.

jarsigner -verify -verbose -certs signerjar.jar

The output may look like this Alt text

Conclusion

By following these steps, you can easily integrate KeyVault JCA provider with Jarsigner. This method ensures a secure and efficient signing process using Azure KeyVault.

Clean up resources

To avoid Azure charges, you should clean up unnecessary resources.

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
az ad app delete --id $CLIENT_ID