Module jdk.jartool

Class JarSigner.Builder

java.lang.Object
jdk.security.jarsigner.JarSigner.Builder
封装类:
JarSigner

public static class JarSigner.Builder extends Object
一个可变的构建器类,可以根据各种与签名相关的参数创建一个不可变的JarSigner
自JDK版本:
9
  • Constructor Details

    • Builder

      public Builder(KeyStore.PrivateKeyEntry entry)
      使用一个KeyStore.PrivateKeyEntry对象创建一个JarSigner.Builder对象。
      参数:
      entry - 签名者的KeyStore.PrivateKeyEntry
    • Builder

      public Builder(PrivateKey privateKey, CertPath certPath)
      使用私钥和证书路径创建一个JarSigner.Builder对象。
      参数:
      privateKey - 签名者的私钥。
      certPath - 签名者的证书路径。
      抛出:
      IllegalArgumentException - 如果certPath为空,或privateKey的算法与certPath中的终端实体证书(certPath中的第一个证书)的算法不匹配。
  • Method Details

    • digestAlgorithm

      public JarSigner.Builder digestAlgorithm(String algorithm) throws NoSuchAlgorithmException
      设置摘要算法。如果未指定摘要算法,则将使用getDefaultDigestAlgorithm()返回的默认算法。
      参数:
      algorithm - 算法的标准名称。有关标准算法名称的信息,请参阅Java加密体系结构标准算法名称文档中的MessageDigest部分。
      返回:
      JarSigner.Builder本身。
      抛出:
      NoSuchAlgorithmException - 如果algorithm不可用。
    • digestAlgorithm

      public JarSigner.Builder digestAlgorithm(String algorithm, Provider provider) throws NoSuchAlgorithmException
      从指定提供者设置摘要算法。如果未指定摘要算法,则将使用getDefaultDigestAlgorithm()返回的默认算法。
      参数:
      algorithm - 算法的标准名称。有关标准算法名称的信息,请参阅Java加密体系结构标准算法名称文档中的MessageDigest部分。
      provider - 提供者。
      返回:
      JarSigner.Builder本身。
      抛出:
      NoSuchAlgorithmException - 如果指定提供者中不可用algorithm
    • signatureAlgorithm

      public JarSigner.Builder signatureAlgorithm(String algorithm) throws NoSuchAlgorithmException
      设置签名算法。如果未指定签名算法,则将使用私钥的getDefaultSignatureAlgorithm(java.security.PrivateKey)返回的默认签名算法。
      参数:
      algorithm - 算法的标准名称。有关标准算法名称的信息,请参阅Java加密体系结构标准算法名称文档中的Signature部分。
      返回:
      JarSigner.Builder本身。
      抛出:
      NoSuchAlgorithmException - 如果algorithm不可用。
      IllegalArgumentException - 如果algorithm与签名者私钥的算法不兼容。
    • signatureAlgorithm

      public JarSigner.Builder signatureAlgorithm(String algorithm, Provider provider) throws NoSuchAlgorithmException
      从指定提供者设置签名算法。如果未指定签名算法,则将使用私钥的getDefaultSignatureAlgorithm(java.security.PrivateKey)返回的默认签名算法。
      参数:
      algorithm - 算法的标准名称。有关标准算法名称的信息,请参阅Java加密体系结构标准算法名称文档中的Signature部分。
      provider - 提供者。
      返回:
      JarSigner.Builder本身。
      抛出:
      NoSuchAlgorithmException - 如果指定提供者中不可用algorithm
      IllegalArgumentException - 如果algorithm与签名者私钥的算法不兼容。
    • tsa

      public JarSigner.Builder tsa(URI uri)
      设置时间戳授权机构(TSA)的URI。
      参数:
      uri - URI。
      返回:
      JarSigner.Builder本身。
    • signerName

      public JarSigner.Builder signerName(String name)
      设置签名者名称。该名称将用作签名文件的基本名称。所有小写字符将转换为大写以用于签名文件名。如果未指定签名者名称,则将使用字符串"SIGNER"。
      参数:
      name - 签名者名称。
      返回:
      JarSigner.Builder本身。
      抛出:
      IllegalArgumentException - 如果name为空或大小超过8,或者包含不属于字符集"a-zA-Z0-9_-"的字符。
    • eventHandler

      public JarSigner.Builder eventHandler(BiConsumer<String,String> handler)
      设置一个事件处理程序,当在签名过程中要添加、签名或更新一个JarEntry时将触发该处理程序。

      处理程序可用于显示签名进度。处理程序的第一个参数可以是"adding"、"signing"或"updating",第二个参数是正在处理的JarEntry的名称。

      参数:
      handler - 事件处理程序。
      返回:
      JarSigner.Builder本身。
    • setProperty

      public JarSigner.Builder setProperty(String key, String value)
      设置由指定键指示的额外特定于实现的属性。
      实现说明:
      该实现支持以下属性:
      • "tsaDigestAlg": 时间戳请求中摘要数据的算法。默认值与getDefaultDigestAlgorithm()的结果相同。
      • "tsaPolicyId": 时间戳授权机构的TSAPolicyID。无默认值。
      • "internalsf": 如果.SF文件包含在签名块内,则为"true",否则为"false"。默认为"false"。
      • "sectionsonly": 如果.SF文件仅包含清单的每个部分的哈希值而不是整个清单的哈希值,则为"true",否则为"false"。默认为"false"。
      所有属性名称不区分大小写。
      参数:
      key - 属性的名称。
      value - 属性的值。
      返回:
      JarSigner.Builder本身。
      抛出:
      UnsupportedOperationException - 如果此实现不支持该键。
      IllegalArgumentException - 如果值不被视为此键的合法值。
    • getDefaultDigestAlgorithm

      public static String getDefaultDigestAlgorithm()
      获取默认摘要算法。
      实现说明:
      该实现返回"SHA-384"。该值可能会在将来更改。
      返回:
      默认摘要算法。
    • getDefaultSignatureAlgorithm

      public static String getDefaultSignatureAlgorithm(PrivateKey key)
      获取私钥的默认签名算法。例如,2048位RSA密钥的SHA384withRSA,384位EC密钥的SHA384withECDSA。
      实现注意事项:
      此实现利用了NIST SP 800-57 Part 1-Rev.5中表2和表3定义的可比较强度,以及必要时采用NIST建议。具体而言,如果RSA密钥的密钥大小大于7680位,或者EC密钥的密钥大小大于等于512位,则将使用SHA-512作为签名的哈希函数。否则,除非密钥大小太小而无法生成签名算法,否则将使用SHA-384。对于DSA密钥,无论密钥大小如何,都将返回SHA256withDSA签名算法。该值可能会在将来更改。
      参数:
      key - 私钥。
      返回:
      默认签名算法。如果找不到默认签名算法,则返回null。在这种情况下,必须调用signatureAlgorithm(java.lang.String)来指定签名算法。否则,build()方法将抛出一个IllegalArgumentException
    • build

      public JarSigner build()
      从setter方法设置的参数构建一个JarSigner对象。

      此方法不会修改此Builder对象的内部状态,并且可以多次调用以生成多个JarSigner对象。调用此方法后,在新构建的JarSigner对象上调用此Builder的任何方法都不会产生影响。

      返回:
      JarSigner对象。
      抛出:
      IllegalArgumentException - 如果未设置签名算法且无法使用getDefaultSignatureAlgorithm(java.security.PrivateKey)从私钥派生签名算法。