diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d97fbf8..9376121 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -52,7 +52,7 @@
         uses: gradle/wrapper-validation-action@v1.1.0
       - name: Run Build
         id: build_step
-        run: './gradlew --continue clean build -PsignPublication=false'
+        run: './gradlew "-Pfreemarker.signMethod=none" --continue clean build'
       - name: Upload Failed Report
         uses: actions/upload-artifact@v2.3.1
         if: failure() && steps.build_step.outcome == 'failure'
diff --git a/build.gradle.kts b/build.gradle.kts
index 51ca745..35e32bf 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -337,7 +337,8 @@
                 }
             }
         }
-        if (fmExt.doSignPackages.get()) {
+        if (fmExt.signMethod.needSignature()) {
+            fmExt.signMethod.configure(signing)
             signing.sign(mainPublication)
         }
     }
@@ -359,6 +360,7 @@
 
 fun registerDistSupportTasks(archiveTask: TaskProvider<Tar>) {
     val signTask = tasks.register<freemarker.build.SignatureTask>("${archiveTask.name}Signature") {
+        signatureConfiguration.set(fmExt.signMethod)
         inputFile.set(archiveTask.flatMap { task -> task.archiveFile })
     }
 
@@ -370,7 +372,7 @@
         dependsOn(archiveTask)
         dependsOn(checksumTask)
 
-        if (fmExt.doSignPackages.get()) {
+        if (fmExt.signMethod.needSignature()) {
             dependsOn(signTask)
         }
     }
diff --git a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt
index e7f069b..6683f0a 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootExtension.kt
@@ -201,10 +201,10 @@
         .gradleProperty("freemarker.javadoc.javaVersion")
         .get()
 
-    val doSignPackages = context.providers
-        .gradleProperty("signPublication")
-        .map { it.toBoolean() }
-        .orElse(true)
+    val signMethod = context.providers
+        .gradleProperty("freemarker.signMethod")
+        .map { SignatureConfiguration.valueOf(it.uppercase()) }
+        .get()
 
     private val allConfiguredSourceSetNamesRef = project.objects.setProperty<String>()
     val allConfiguredSourceSetNames: Provider<Set<String>> = allConfiguredSourceSetNamesRef
diff --git a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt
index c7bb172..bbb2fb0 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/FreemarkerRootPlugin.kt
@@ -91,7 +91,7 @@
                     if (ext.versionService.developmentBuild) {
                         throw IllegalStateException("The development build configuration is active!")
                     }
-                    if (!ext.doSignPackages.get()) {
+                    if (!ext.signMethod.needSignature()) {
                         throw IllegalStateException("Package signing is disabled!")
                     }
                 }
diff --git a/buildSrc/src/main/kotlin/freemarker/build/SignatureConfiguration.kt b/buildSrc/src/main/kotlin/freemarker/build/SignatureConfiguration.kt
new file mode 100644
index 0000000..12ae3ca
--- /dev/null
+++ b/buildSrc/src/main/kotlin/freemarker/build/SignatureConfiguration.kt
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package freemarker.build
+
+import org.gradle.plugins.signing.SigningExtension
+
+enum class SignatureConfiguration {
+    NONE,
+    GPG_COMMAND {
+        override fun configure(ext: SigningExtension) {
+            ext.useGpgCmd()
+        }
+    },
+    GRADLE_PROPERTIES;
+
+    fun needSignature() = this != NONE
+
+    open fun configure(ext: SigningExtension) {
+    }
+}
diff --git a/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt b/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt
index 6e51994..0b9f094 100644
--- a/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt
+++ b/buildSrc/src/main/kotlin/freemarker/build/SignatureTask.kt
@@ -24,18 +24,23 @@
 import org.gradle.api.DefaultTask
 import org.gradle.api.file.RegularFileProperty
 import org.gradle.api.model.ObjectFactory
+import org.gradle.api.provider.Property
 import org.gradle.api.provider.Provider
+import org.gradle.api.tasks.Input
 import org.gradle.api.tasks.InputFile
 import org.gradle.api.tasks.OutputFile
 import org.gradle.api.tasks.PathSensitive
 import org.gradle.api.tasks.PathSensitivity
 import org.gradle.api.tasks.TaskAction
+import org.gradle.kotlin.dsl.property
 import org.gradle.kotlin.dsl.the
 import org.gradle.plugins.signing.SigningExtension
 
 open class SignatureTask @Inject constructor(
     objects: ObjectFactory
 ) : DefaultTask() {
+    @Input
+    val signatureConfiguration: Property<SignatureConfiguration> = objects.property()
 
     @InputFile
     @PathSensitive(PathSensitivity.NONE)
@@ -48,6 +53,10 @@
 
     @TaskAction
     fun signFile() {
-        signing.sign(inputFile.get().asFile)
+        val config = signatureConfiguration.get()
+        if (config.needSignature()) {
+            config.configure(signing)
+            signing.sign(inputFile.get().asFile)
+        }
     }
 }
diff --git a/gradle.properties b/gradle.properties
index 29b98ea..9a9e336 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -18,3 +18,6 @@
 freemarker.javaVersion=8
 freemarker.javadoc.javaVersion=16
 freemarker.test.javaVersion=16
+
+# Allowed values: "none", "gradle_properties", "gpg_command"
+freemarker.signMethod=none
