Java 安全证书-了解CA在代码签名中的角色

Java 安全证书-了解CA在代码签名中的角色,java,cryptography,certificate,public-key-encryption,public-key,Java,Cryptography,Certificate,Public Key Encryption,Public Key,我对公共密码学是个新手。我对它有一个清晰的理解,但我对一些过去8周我无法理解的问题感到困惑。所以我会尽量解释清楚,以表达我的困惑 我试图理解CA公共证书和代码签名的作用,并因此手动模拟它 密钥库 acmesoft.jks(充当CA) cindy.jks(acmesoft的员工) me.jks(acmesoft员工) 初步设置 Acmesoft生成密钥对并将其公钥分发给员工(CA证书) cindy向cindy.jks导入了CA证书 me已向me.jks导入CA证书 目标 me想要jar一些文件,生

我对公共密码学是个新手。我对它有一个清晰的理解,但我对一些过去8周我无法理解的问题感到困惑。所以我会尽量解释清楚,以表达我的困惑

我试图理解CA公共证书和代码签名的作用,并因此手动模拟它

密钥库
acmesoft.jks(充当CA)
cindy.jks(acmesoft的员工)
me.jks(acmesoft员工)

初步设置
Acmesoft生成密钥对并将其公钥分发给员工(CA证书)
cindy向cindy.jks导入了CA证书
me已向me.jks导入CA证书

目标
me想要jar一些文件,生成一个证书(me cert),让acmesoft(CA)对证书进行签名,并对要发送给cindy的jar文件进行签名

这是我的困惑。
为了实现上述目标,哪个流程是正确的

按时间顺序排列的过程1
me生成密钥对(me证书)
me-jar文件(me-jar)
已发送给CA的ME证书(CA将使用其私钥进行签名。已签名的ME证书将使用带有CA私钥签名的ME公钥)
我把我的签名证书交给辛迪
cindy import ME已签署的\u cert受信任证书没有问题,因为cindy已在较早时导入CA证书
me使用me私钥(不是me签名的证书)在me jar上签名
我把我的jar文件给cindy
cindy让jarsigner在我的jar上验证

流程1问题
Cindy keystore会让ME签署由ME公钥和CA签名组成的U证书。cindy.jks上ME jar上的jarsigner验证显示未找到密钥

我希望它显示找到的密钥,因为cindy.jks中的ME signed_cert具有带有CA私有签名的ME公钥,ME jar文件使用ME私有密钥签名

过程2
与流程1完全相同,但:
Me将从acmesoft(由Me公钥和CA签名组成)返回的Me签名证书导入Me jks
ME使用jarsigner对ME jar文件进行签名

流程2问题
签字后,签字人投诉如下:

jarsigner:找不到的证书链:主\u根。primary_root必须引用包含私钥和相应公钥证书链的有效密钥库密钥项

当然我得到了上面的错误。ME.jks没有CA的私钥。ME不应该有CA私钥

所以我不确定流程2是如何工作的。这是对的还是我的理解是错的

以下是实际的密钥库:

acmesoft

Alias name: acmeroot
Creation date: 2-Feb-2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Issuer: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Serial number: 381e5a1f
Valid from: Mon Feb 02 00:01:14 EST 2015 until: Sun May 03 01:01:14 EDT 2015
Certificate fingerprints:
 MD5:  94:A1:76:2F:D5:05:8D:3C:2C:0F:B2:07:EC:9A:1E:12
 SHA1: AD:0A:28:AD:D9:42:C8:B3:C7:7D:CB:36:6F:EF:2C:99:50:00:30:3C
 SHA256: 31:14:A0:F8:51:72:37:7C:F5:25:6C:3A:F3:10:74:D8:F8:2B:B8:BC:FE:C7:F3:56:89:00:C4:6B:36:48:B2:A4
 Signature algorithm name: SHA1withDSA
 Version: 3
Alias name: acmeroot
Creation date: 2-Feb-2015
Entry type: trustedCertEntry

Owner: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Issuer: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Serial number: 381e5a1f
Valid from: Mon Feb 02 00:01:14 EST 2015 until: Sun May 03 01:01:14 EDT 2015
Certificate fingerprints:
 MD5:  94:A1:76:2F:D5:05:8D:3C:2C:0F:B2:07:EC:9A:1E:12
 SHA1: AD:0A:28:AD:D9:42:C8:B3:C7:7D:CB:36:6F:EF:2C:99:50:00:30:3C
 SHA256: 31:14:A0:F8:51:72:37:7C:F5:25:6C:3A:F3:10:74:D8:F8:2B:B8:BC:FE:C7:F3:56:89:00:C4:6B:36:48:B2:A4
 Signature algorithm name: SHA1withDSA
 Version: 3

*******************************************
*******************************************

Alias name: ME_signedby_acmesoft
Creation date: 11-Feb-2015
Entry type: trustedCertEntry

Owner: CN=kim yap, OU=rbss, O=cibc, L=toronto, ST=ontario, C=ca
Issuer: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Serial number: 4ecdc79c
Valid from: Fri Jan 23 11:10:12 EST 2015 until: Thu Apr 23 12:10:12 EDT 2015
Certificate fingerprints:
 MD5:  AF:27:8B:63:86:A7:3F:FE:D9:03:64:3E:AB:7E:CE:DF
 SHA1: 2E:8A:78:ED:14:12:00:78:67:91:EE:8D:79:45:56:34:FC:17:02:FE
 SHA256: 28:60:A4:20:F1:7E:D3:3B:11:7E:D1:A1:04:F3:3C:70:43:92:91:16:CD:D6:96:A6:CC:71:94:10:1B:26:9D:09
 Signature algorithm name: SHA1withDSA
 Version: 3

Public Key: 02 81 80 79 14 21 28 57 EF 30 0D 98 0D 1A 8B EB 35 C3 76 06 0C FC DC D1 40 A6 0B 30 A4 F0 6E 24 AC 92 2D 44 F9 8F BB F9 51 6D 7F 99 F2 18 A4 55 2F D4 4A 1D 4F CC 9B 3D 5F 00 F6 95 58 77 E3 7E AD 2D 87 79 B7 9F BD 35 1D DC AF 7E 24 EC C7 09 20 C4 3D CA E6 5F 59 49 A9 00 DC 4B 06 CF 37 30 65 4E AC CB 80 50 F4 F4 21 8E DD 81 99 14 AA 9E 3A 07 C3 1B 2E 76 61 F9 B8 51 2A E0 A6 BA 55 0E DB 90 19
ME密钥库

Alias name: ME
Creation date: 23-Jan-2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=kim yap, OU=rbss, O=cibc, L=toronto, ST=ontario, C=ca
Issuer: CN=kim yap, OU=rbss, O=cibc, L=toronto, ST=ontario, C=ca
Serial number: 4ecdc79c
Valid from: Fri Jan 23 11:10:12 EST 2015 until: Thu Apr 23 12:10:12 EDT 2015
Certificate fingerprints:
 MD5:  1A:FC:CF:40:4B:F7:1E:57:ED:28:1E:9B:5A:86:82:3E
 SHA1: 74:02:90:B5:DE:76:D4:04:21:23:2B:B8:6F:7C:B5:D4:41:5B:91:FB
 SHA256: B9:F6:A7:75:89:9F:0B:1F:29:DA:29:71:C1:18:1E:2D:BB:2F:35:41:4F:BA:D7:7C:50:CD:1A:CC:54:B7:12:37
 Signature algorithm name: SHA1withDSA
 Version: 3

Public Key: 02 81 80 79 14 21 28 57 EF 30 0D 98 0D 1A 8B EB 35 C3 76 06 0C FC DC D1 40 A6 0B 30 A4 F0 6E 24 AC 92 2D 44 F9 8F BB F9 51 6D 7F 99 F2 18 A4 55 2F D4 4A 1D 4F CC 9B 3D 5F 00 F6 95 58 77 E3 7E AD 2D 87 79 B7 9F BD 35 1D DC AF 7E 24 EC C7 09 20 C4 3D CA E6 5F 59 49 A9 00 DC 4B 06 CF 37 30 65 4E AC CB 80 50 F4 F4 21 8E DD 81 99 14 AA 9E 3A 07 C3 1B 2E 76 61 F9 B8 51 2A E0 A6 BA 55 0E DB 90 19
cindy密钥库

Alias name: acmeroot
Creation date: 2-Feb-2015
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Issuer: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Serial number: 381e5a1f
Valid from: Mon Feb 02 00:01:14 EST 2015 until: Sun May 03 01:01:14 EDT 2015
Certificate fingerprints:
 MD5:  94:A1:76:2F:D5:05:8D:3C:2C:0F:B2:07:EC:9A:1E:12
 SHA1: AD:0A:28:AD:D9:42:C8:B3:C7:7D:CB:36:6F:EF:2C:99:50:00:30:3C
 SHA256: 31:14:A0:F8:51:72:37:7C:F5:25:6C:3A:F3:10:74:D8:F8:2B:B8:BC:FE:C7:F3:56:89:00:C4:6B:36:48:B2:A4
 Signature algorithm name: SHA1withDSA
 Version: 3
Alias name: acmeroot
Creation date: 2-Feb-2015
Entry type: trustedCertEntry

Owner: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Issuer: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Serial number: 381e5a1f
Valid from: Mon Feb 02 00:01:14 EST 2015 until: Sun May 03 01:01:14 EDT 2015
Certificate fingerprints:
 MD5:  94:A1:76:2F:D5:05:8D:3C:2C:0F:B2:07:EC:9A:1E:12
 SHA1: AD:0A:28:AD:D9:42:C8:B3:C7:7D:CB:36:6F:EF:2C:99:50:00:30:3C
 SHA256: 31:14:A0:F8:51:72:37:7C:F5:25:6C:3A:F3:10:74:D8:F8:2B:B8:BC:FE:C7:F3:56:89:00:C4:6B:36:48:B2:A4
 Signature algorithm name: SHA1withDSA
 Version: 3

*******************************************
*******************************************

Alias name: ME_signedby_acmesoft
Creation date: 11-Feb-2015
Entry type: trustedCertEntry

Owner: CN=kim yap, OU=rbss, O=cibc, L=toronto, ST=ontario, C=ca
Issuer: CN=acmesoft, OU=information resources department, O=certificate authority, L=toronto, ST=ontario, C=ca
Serial number: 4ecdc79c
Valid from: Fri Jan 23 11:10:12 EST 2015 until: Thu Apr 23 12:10:12 EDT 2015
Certificate fingerprints:
 MD5:  AF:27:8B:63:86:A7:3F:FE:D9:03:64:3E:AB:7E:CE:DF
 SHA1: 2E:8A:78:ED:14:12:00:78:67:91:EE:8D:79:45:56:34:FC:17:02:FE
 SHA256: 28:60:A4:20:F1:7E:D3:3B:11:7E:D1:A1:04:F3:3C:70:43:92:91:16:CD:D6:96:A6:CC:71:94:10:1B:26:9D:09
 Signature algorithm name: SHA1withDSA
 Version: 3

Public Key: 02 81 80 79 14 21 28 57 EF 30 0D 98 0D 1A 8B EB 35 C3 76 06 0C FC DC D1 40 A6 0B 30 A4 F0 6E 24 AC 92 2D 44 F9 8F BB F9 51 6D 7F 99 F2 18 A4 55 2F D4 4A 1D 4F CC 9B 3D 5F 00 F6 95 58 77 E3 7E AD 2D 87 79 B7 9F BD 35 1D DC AF 7E 24 EC C7 09 20 C4 3D CA E6 5F 59 49 A9 00 DC 4B 06 CF 37 30 65 4E AC CB 80 50 F4 F4 21 8E DD 81 99 14 AA 9E 3A 07 C3 1B 2E 76 61 F9 B8 51 2A E0 A6 BA 55 0E DB 90 19

以下是Cay Horstmann关于证书签名(模拟CA)的CoreJava 2的原始版本

在第814页的“验证签名”一节中,您看到了Alice如何使用自签名证书分发签名 鲍勃的公钥。但是,Bob需要通过使用验证指纹来确保证书有效 爱丽丝。 假设Alice想给她的同事Cindy发一条签名信息,但Cindy不想打扰她 验证大量的签名指纹。现在假设Cindy信任一个实体来验证签名。 在本例中,Cindy信任ACME软件的信息资源部门。 该部门设有证书颁发机构(CA)。ACME的每个人的密钥库中都有CA的公钥, 由仔细检查密钥指纹的系统管理员安装。CA签署ACME的密钥 员工。当它们安装彼此的密钥时,密钥库将隐式信任它们,因为它们是安全的 由可信密钥签名

以下是如何模拟此过程。
创建密钥库acmesoft.certs。
生成密钥PAR并输出公钥:

代码视图:
keytool-genkeypair-keystore acmesoft.certs-alias acmeroot
keytool-exportcert-keystore acmesoft.certs-alias acmeroot-file acmeroot.cer

公钥导出为“自签名”证书。然后将其添加到每个员工的密钥库中

代码视图:
keytool-importcert-keystore cindy.certs-alias acmeroot-file acmeroot.cer

为了让Alice向Cindy和ACME软件的其他人发送消息,她需要将她的证书带到 信息资源部,并签字。不幸的是,此功能在中缺失 键控工具程序。在本书的配套代码中,我们提供了一个CertificateSigner类来填补这一空白。一 ACME软件的授权工作人员将验证Alice的身份,并根据需要生成签名证书 如下:

java CertificateSigner-密钥库acmesoft.certs-别名acmeroot -填充alice.cer-由acmeroot.cer签名的输出文件alice

证书签署者程序必须能够访问ACME软件密钥库,并且工作人员必须知道 密钥库密码。显然,这是一项敏感的行动。 Alice将Alice_signedby_acmeroot.cer文件提供给Cindy和ACME软件中的任何其他人。 或者,ACME软件可以简单地将文件存储在公司目录中。记住,此文件包含Alice的 公钥和ACME软件断言此密钥确实属于Alice。 现在Cindy将签名证书导入她的密钥库:

代码视图: keytool-importcert-keystore cindy.certs-alias-alice\u-signedby\u acmeroot.cer文件

密钥库验证密钥是否由密钥库中已存在的受信任根密钥签名。辛迪是 未要求验证证书指纹。 一旦Cindy添加了根证书和定期发送她的文档的人的证书,她 从来没有