3步注册成为你的数字证书 确保你机器上安装了jdk
首先进入一个新建立空文件夹,把需要注册的打成jar的jar包放入这个文件夹,然后cmd键入该文件夹,然后输入下面的命令
1. 生成一个注册文件
keytool -genkey -alias lams -keypass 123456 -storepass 123456 -validity 1277 -keystore .\lams
这时候会提示让你输入一些信息,国家公司之类的信息. 1277是天数
2验证
keytool -list -keystore .\lams -storepass LAMS@)!!
3 注册jar
jarsigner -verbose -keystore .\lams uupload.jar lams
会让你输入上面的密码123456
这是发现你的jar文件里面的里面 META-INF文件夹下面多了几个文件.然后MAINIFEST.MF也改变了.这时候说明注册完成了.
下面是 keytool 和 jarsigner 命令说明: 都是在网上找的,如果是简单的applet上面的足够了
keytool :
-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias 产生别名
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-dname 指定证书拥有者信息 例如: "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn"
-list 显示密钥库中的证书信息 keytool -list -v -keystore sage -storepass ....
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias caroot -file caroot.crt
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias sage -keystore sage
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage
-import 将已签名数字证书导入密钥库 keytool -import -alias sage -keystore sagely -file
导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。
jarsigner :
下面列出并说明了各种 jarsigner 选项。注意:
- 所有选项名前都有一个减号 (-)。
- 选项可以以任何次序提供。
- 斜体项(选项值)代表必须提供的实际值。
-
-keystore
、-storepass
、-keypass
、-sigfile
和-signedjar
选项仅在为 JAR 文件签名时相关,而不是在校验已签名的 JAR 文件时。同样,别名仅在为 JAR 文件签名时在命令行中指定。
-
指定密钥仓库的 URL。缺省值是用户的宿主目录中的 .keystore 文件,它由系统属性“user.home”决定。
签名时需要密钥仓库,因此如果没有缺省的(或要使用非缺省的)密钥仓库,就必须明确指定一个。
校验时不需要密钥仓库,但如果指定了一个,或存在缺省的,且
-verbose
选项也被指定了,则将输出该密钥仓库中是否包含了用于校验 JAR 文件的证书的附加信息。注意:
-keystore
参数实际上可以是指定的文件名(及路径)而不是 URL,这种情况下它将当作“file:” URL. 也就是说,-keystore filePathAndName
被当作等价于
-keystore file:filePathAndName
-
指定要被实例化的密钥仓库类型。默认的密钥仓库类型是安全属性文件中 "keystore.type" 属性值所指定的那个类型,由
java.security.KeyStore
中的静态方法getDefaultType
返回。 -
指定访问密钥仓库所需的口令。这仅在签名(不是校验)JAR 文件时需要。在这种情况下,如果命令行中没有提供
-storepass
选项,用户将被提示输入口令。注意: 口令不应在命令行或脚本中指定,除非是为了测试,或在安全系统中。并且,在口令提示下键入口令时将显示出键入的字符,因此不要在其它人面前键入。
-
指定用于保护密钥仓库项(由命令行中指定的别名标出)的私钥的口令。使用 jarsigner 为 JAR 文件签名时需要该口令。如果命令行中没有提供口令,且所需的口令与密钥仓库的口令不同,则将提示用户输入它。
注意: 口令不应在命令行或脚本中指定,除非是为了测试,或在安全系统中。并且,在口令提示下键入口令时将显示出键入的字符,因此不要在其它人面前键入。
-
指定用于生成 .SF 和 .DSA 文件的基本文件名。例如,如果 file 为“DUKESIGN”,则生成的 .SF 和 .DSA 文件将被命名为“DUKESIGN.SF”和“DUKESIGN.DSA”,并将放到已签名的 JAR 文件的“META-INF”目录中。
file 中的字符应来自“a-zA-Z0-9_-”。也就是说,只允许字母、数字、下划线和连字符。注意: .SF 和 .DSA 文件名中小写字母将被转换为大写字母。
如果命令行中没有
-sigfile
选项,则 .SF 和 .DSA 文件的基本文件名将是命令行中指定的别名的前 8 个字符,并全部被转换为大写。如果别名少于 8 个字符,将使用整个别名。如果别名中包含签名文件名所不允许的字符,则形成文件名时这样的字符将被转换为下划线 ("_")。 -
指定用于已签名的 JAR 文件的名称。
如果命令行中没有指定名称,将使用输入的 JAR 文件名(要签名的 JAR 文件名);换句话说,该文件将被签名 JAR 文件覆盖。
-
如果它出现在命令行中,则指定的 JAR 文件将被校验,而不是签名。如果校验成功,将显示“jar verified”。如果试图校验未签名的 JAR 文件,或校验被不支持的算法(例如未安装 RSA 提供者时使用的 RSA)签名的 JAR 文件,则将有如下显示: "jar is unsigned. (signatures missing or not parsable)"
可以校验使用 jarsigner 或 JDK 1.1 javakey 工具或共用二者签名的 JAR 文件。
有关校验的详细信息,参见 JAR 文件校验。
-
如果它与
-verify
和-verbose
选项一起出现在命令行中,则输出将包括 JAR 文件的每个签名人的证书信息。该信息包括- 验证签名人公钥的证书的类型名(保存在 .DSA 文件中)
- 如果该证书是 X.509 证书(更准确地说是
java.security.cert.X509Certificate
的实例): 签名人的特征名
密钥仓库也被检查。如果命令行中没有指定密钥仓库值,缺省密钥仓库文件(如果有)将被检查。如果签名人的公钥证书与密钥仓库中的项匹配,则还将显示下列信息:
- 该签名人的密钥仓库项的别名,在圆括号中。如果该签名人实际上来自于 JDK 1.1 身份数据库而不是密钥仓库,则别名将显示在方括号而不是圆括号中。
- 如果它出现在命令行中,则代表“verbose”模式,它使 jarsigner 在 JAR 签名或校验过程中输出额外信息。
-
过去,JAR 文件被签名时产生的 .DSA(签名块)文件包含一个同时产生的 .SF 文件(签名文件)的完整编码副本。这种做法已被更改。为了减小输出 JAR 文件的整个大小,缺省情况下 .DSA 文件不再包含 .SF 文件的副本。但是如果
-internalsf
出现在命令行中,将采用旧的做法。该选项主要在测试时有用;实际上不应使用它,因为这样将消除有用的优化。 -
如果它出现在命令行中,则 JAR 文件被签名时生成的 .SF 文件(签名文件)将不包括含有整个清单文件的散列的头。它仅包含 与 JAR 中每个单独的源文件相关的信息和散列,如签名 (.SF) 文件所述。
缺省情况下,该头将作为一种优化手段添加。只要该头存在,则无论何时 JAR 被校验,都将首先检查该头中的散列是否真正与整个清单文件的散列匹配。如果匹配,校验将进行下一步。如果不匹配,则有必要执行一个次优的校验,检查 .SF 文件中每个源文件信息部分中的散列是否等于清单文件中相应部分的散列。
有关的详细信息,参见 JAR 文件校验。
该选项主要在测试时有用;实际上不应使用它,因为这样将消除有用的优化。
-
将指定的 javaoption 串直接传递到 Java 解释器。((jarsigner 实际上是解释器的一个 “wrapper”)。该选项不应含有任何空格。它有助于调整执行环境或内存使用。要获得可用的解释器选项的清单,可在命令行键入
java -h
或java -X
。
-keystore
url
-storetype
storetype
-storepass
password
-keypass
password
-sigfile
file
-signedjar
file
-verify
-certs
-verbose
-internalsf
-sectionsonly
-J
javaoption