如何把安全证书导入/删除 java中的cacerts证书库

本文介绍了一种将SSL证书导入Java cacerts证书库的方法。首先从目标网站获取证书,然后通过命令行工具keytool将其导入Java的安全存储中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目开发中,有时会遇到与SSL安全证书导入打交道的,如何把证书导入java中的cacerts证书库呢?
其实很简单,方法如下:
每一步:进入某个https://www.xxx.com开头的网站,把要导入的证书下载过来, 
    在该网页上右键 >> 属性 >> 点击"证书" >> 
    再点击上面的"详细信息"切换栏 >> 
    再点击右下角那个"复制到文件"的按钮 
    就会弹出一个证书导出的向导对话框,按提示一步一步完成就行了。 
    例如:保存为abc.cer,放在C盘下 
第二步:如何把上面那步的(abc.cer)这个证书导入java中的cacerts证书库里? 
    方法如下 
    假设你的jdk安装在C:\jdk1.5这个目录, 
    开始 >> 运行 >> 输入cmd 进入dos命令行 >> 
    再用cd进入到C:\jdk1.5\jre\lib\security这个目录下 
    敲入如下命令回车执行 
    keytool -import -alias cacerts -keystore cacerts -file d:\software\AKAZAM-Mail.cer -trustcacerts 
    此时命令行会提示你输入cacerts证书库的密码, 
    你敲入changeit就行了,这是java中cacerts证书库的默认密码, 
    你自已也可以修改的。 
    ok,大功告成! 
所有者: CN=www.hqftest.com
发布者: CN=CA 沃通免费SSL证书 G2, O=WoSign CA Limited, C=CN
序列号: 6850e21cfb92b1733122f5b90aa81e30
有效期开始日期: Sun Jun 12 18:33:05 CST 2016, 截止日期: Tue Jun 12 18:33:05 CST
2018
证书指纹:
         MD5: 49:AF:BE:EB:FA:AA:B0:9D:DF:63:8F:D6:CF:85:72:58
         SHA1: 15:51:AC:A4:59:EE:F1:09:8E:84:A7:95:82:73:30:5F:37:29:9B:52
         SHA256: 8C:F3:F9:7C:CF:5F:30:6B:6D:50:CE:83:3F:1D:67:CA:80:E7:58:2E:7F:
76:64:27:66:8F:57:49:52:FF:68:87
         签名算法名称: SHA256withRSA
         版本: 3

扩展:

#1: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
AuthorityInfoAccess [
  [
   accessMethod: ocsp
   accessLocation: URIName: http://ocsp2.wosign.cn/ca2g2/server1/free
,
   accessMethod: caIssuers
   accessLocation: URIName: http://aia2.wosign.cn/ca2g2.server1.free.cer
]
]

#2: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 30 DA 74 86 F3 28 90 56   9E D7 31 31 C2 BD 59 CD  0.t..(.V..11..Y.
0010: 93 12 39 1D                                        ..9.
]
]

#3: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:false
  PathLen: undefined
]

#4: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
  [DistributionPoint:
     [URIName: http://crls2.wosign.cn/ca2g2-server1-free.crl]
]]

#5: ObjectId: 2.5.29.32 Criticality=false
CertificatePolicies [
  [CertificatePolicyId: [2.23.140.1.2.1]
[]  ]
  [CertificatePolicyId: [1.3.6.1.4.1.36305.1.1.2]
[PolicyQualifierInfo: [
  qualifierID: 1.3.6.1.5.5.7.2.1
  qualifier: 0000: 16 1D 68 74 74 70 3A 2F   2F 77 77 77 2E 77 6F 73  ..http://w
ww.wos
0010: 69 67 6E 2E 63 6F 6D 2F   70 6F 6C 69 63 79 2F     ign.com/policy/

]]  ]
]

#6: ObjectId: 2.5.29.37 Criticality=false
ExtendedKeyUsages [
  clientAuth
  serverAuth
]

#7: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  DigitalSignature
  Key_Encipherment
]

#8: ObjectId: 2.5.29.17 Criticality=false
SubjectAlternativeName [
  DNSName: www.hqftest.com
  DNSName: hqftest.com
]

#9: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: EA 06 FF 40 DF 4D D0 3D   8F 9F 31 E6 8E 7B 37 59  ...@.M.=..1...7Y
0010: 7A 12 10 1D                                        z...
]
]

是否信任此证书? [否]:  y
证书已添加到密钥库中


 以后更新时,先删除原来的证书,然后导入新的证书 

keytool -list -keystore cacerts 
keytool -delete -alias akazam_email -keystore cacerts 
keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts -trustcacerts


<think>首先,用户的问题是关于如何从JDKcacerts证书库删除特定证书。参考提供的引用,我需要基于这些信息来构建回答。 关键引用内容: - 引用[2]:提到了查看cacerts中的证书列表的命令:`keytool -list -keystore /${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit`,以及导入证书的命令。 - 引用[3]:讨论导入证书cacerts的步骤,包括文件路径和选项。 - 引用[4]:提到了JAVA_OPTS设置,用于信任。 用户的需求是删除证书,而不是导入。所以,我需要回想或推断如何删除证书。keytool工具支持删除证书。 标准keytool命令用于删除证书: - 命令格式:`keytool -delete -alias <alias> -keystore <keystore> -storepass <password>` - 对于cacerts,keystore路径通常是`${JAVA_HOME}/jre/lib/security/cacerts`,密码是`changeit`。 回答结构: - 系统指令要求回答清晰,逐步解决问题。 - 使用中文回答。 - 行内数学表达式用$...$,但这里没有数学内容,所以可能不需要。 - 独立公式用$$...$$,但这里没有公式。 - 生成相关问题。 - 在引用段落末尾添加引用标识。 步骤: 1. 解释cacerts证书库是什么。 2. 说明如何列出当前证书以找到要删除证书的别名。 3. 提供删除命令。 4. 注意事项,如密码、路径等。 5. 基于引用添加引用标识。 引用标识: - 引用[2]提到了查看证书列表的命令。 - 引用[3]和[4]提供了一些上下文,但主要针对导入。 - 我应该自然地融入引用。例如,在描述查看证书时引用[2],在路径方面引用[3]。 回答大纲: - 开头:直接回答问题。 - 步骤1:列出cacerts中的证书,找到要删除的别名。 - 步骤2:使用keytool删除证书。 - 步骤3:验证删除。 - 注意事项:如默认密码是changeit,路径基于JAVA_HOME。 - 结尾:生成相关问题。 相关问题: - 基于主题,如如何导入证书、管理证书库等。 - 例如: 1. 如何导入证书cacerts? 2. 如何更改cacerts的密码? 3. 什么是证书别名,如何设置? 确保语言自然:使用中文,保持专业和清晰。</think>### 如何从JDKcacerts证书库删除特定证书 JDK的`cacerts`证书库位于`${JAVA_HOME}/jre/lib/security`目录下,是Java默认的信任,用于存储受信任的证书颁发机构(CA)证书。要删除中的特定证书,您需要使用Java的`keytool`实用程序。以下是基于标准JDK操作的步骤(适用于Windows、Linux和macOS系统),确保您已安装JDK并设置好`JAVA_HOME`环境变量。 #### 步骤1: 列出cacerts中的证书,找到要删除证书的别名 在删除前,您需要先确定证书的别名(alias)。使用`keytool -list`命令查看所有证书: ```bash keytool -list -keystore "${JAVA_HOME}/jre/lib/security/cacerts" -storepass changeit ``` - **命令解释**: - `-keystore`: 指定cacerts证书库的路径(Windows用户需替换路径分隔符为`\`,例如`"C:\Program Files\Java\jdk1.8.0_231\jre\lib\security\cacerts"`)。 - `-storepass changeit`: 默认密码是`changeit`(如果已修改,请使用实际密码)。 - **输出示例**: ``` keystore type: JKS keystore provider: SUN Your keystore contains 100 entries verisignclass2g2ca [jdk], 2024-10-10, trustedCertEntry, Certificate fingerprint (SHA-256): 12:34:56:... my_custom_cert [jdk], 2025-01-01, trustedCertEntry, # 假设这是要删除证书,别名为"my_custom_cert" ... ``` 在输出中找到目标证书的别名(例如`my_custom_cert`),记录它用于下一步[^2]。 #### 步骤2: 删除指定证书 使用`keytool -delete`命令删除证书。替换`<alias>`为步骤1中找到的别名: ```bash keytool -delete -alias "<alias>" -keystore "${JAVA_HOME}/jre/lib/security/cacerts" -storepass changeit ``` - **命令解释**: - `-delete`: 删除操作。 - `-alias "<alias>"`: 指定证书别名(必须精确匹配,区分大小写)。 - 其他参数同步骤1。 - **示例**(删除别名为`my_custom_cert`的证书): ```bash keytool -delete -alias "my_custom_cert" -keystore "/usr/lib/jvm/java-11-openjdk/jre/lib/security/cacerts" -storepass changeit ``` 如果成功,输出类似:`Certificate with alias <alias> deleted from keystore`。 #### 步骤3: 验证删除 再次运行步骤1的列表命令,确认证书已移除: ```bash keytool -list -keystore "${JAVA_HOME}/jre/lib/security/cacerts" -storepass changeit ``` 检查输出中目标别名是否消失。如果别名不存在,表示删除成功。 #### 注意事项 - **密码安全**:`cacerts`默认密码是`changeit`。如果需要修改密码,使用`keytool -storepasswd`命令[^4]。 - **路径问题**:Windows系统路径可能包含空格(如`Program Files`),需用双引号包裹路径(例如`"C:\...\cacerts"`),否则会报错“非法选项”[^3]。 - **权限要求**:在Linux/macOS上,可能需要`sudo`权限;在Windows上,以管理员身份运行命令提示符。 - **影响范围**:删除证书后,依赖该证书的HTTPS连接(如Gradle拉取私服依赖)可能会失败。确保删除的是不必要的证书[^1]。 - **备份建议**:操作前备份cacerts文件:`cp "${JAVA_HOME}/jre/lib/security/cacerts" cacerts_backup`。 此方法适用于JDK 8及以上版本。如果您遇到路径或别名错误,请检查`JAVA_HOME`设置和别名拼写[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值