关于Keytool创建服务器自签名证书

本文详细介绍了keytool命令的使用方法,包括生成密钥对、证书请求等操作,并提供了生成自签名证书的具体步骤。同时,文章还针对iOS应用的证书需求进行了特别说明。

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

keytool命令的基本信息

#keytool --help
密钥和证书管理工具

命令:

 -certreq            生成证书请求
 -changealias        更改条目的别名
 -delete             删除条目
 -exportcert         导出证书
 -genkeypair         生成密钥对
 -genseckey          生成密钥
 -gencert            根据证书请求生成证书
 -importcert         导入证书或证书链
 -importpass         导入口令
 -importkeystore     从其他密钥库导入一个或所有条目
 -keypasswd          更改条目的密钥口令
 -list               列出密钥库中的条目
 -printcert          打印证书内容
 -printcertreq       打印证书请求的内容
 -printcrl           打印 CRL 文件的内容
 -storepasswd        更改密钥库的存储口令

使用 "keytool -command_name -help" 获取 command_name 的用法

当然,由于某些原因,一些参数被隐藏了,请参考如下数据

Option

默认值

-alias

“mykey”

-keyalg

“DSA” 使用-genkeypair命令时

“DES” 使用-genseckey命令时

-keysize

2048  使用 –genkeypair命令,并且-keyalg选项是”RSA”时

1024  使用 –genkeypair命令,并且-keyalg选项是”DSA”时

256   使用 –genkeypair命令,并且-keyalg选项是”EC”时

56    使用 –genseckey 命令,并且-keyalg选项是”DES”时

168   使用 –genseckey 命令,并且-keyalg选项是”DESede”时

-validity

90

-keystore

默认的的文件名是 .keystore ,是一个隐藏文件。

-storetype

默认值java.security中配置的,SUN指定的是JKS,可以人为修改

-file

如果是写,值为stout,如果是读,值为stdin

-protected

false

-sigalg

SHA1withDSA   如果生成KeyPair使用的时DSA算法

SHA256withRSA 如果生成KeyPair使用的时RSA算法

SHA256withECDSA 如果生成KeyPair使用的时EC算法

 

1.生成根证书keystore

1.生成根证书keystore

注意,如果是iOS使用的证书

必须导出iOS端需要的p12文件

-keysize 2048[苹果要求证书至少2048]

-sigalg必须符合

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

服务器必须支持TLSv1.2及以上版本

 

2.添加中间人证书密钥对到keystore中

2.添加中间人证书

3.生成请求密钥文件csr

3.生成请求密钥文件csr

4.使用root ca对中间人证书签名

4.生成服务端信任证书

5.将中间人cer中的密钥对导入到keystore

5.将服务端信任证书导入keystore中

6.导出客户端信任证书

6.导出客户端信任证书

7.查看证书库信息

7.查看证书库信息

通过如上步骤,我们生成如下文件

8.所有证书文件

8.所有证书文件

一般用法,请参考上一篇博客《J2SE Socket SSL/TLS C/S模式编程

但是,我们这里需要再进行几个步骤

9.生成指定域名的证书密钥对到keystore中

10.生成指定域名的请求CSR文件

11.使用中间人对生成指定域名的证书签名

12.将指定域名的cer中的密钥导入keystore中

13.我们需要重新初始化重新加载keystore,并且重新初始化SSLSocket

KeyStore updateKeyStore(String port, String host) throws IOException, GeneralSecurityException
{
    synchronized (CERT_PATH)
    {
      if (!this.keyStore.containsAlias(host))
      {
        log.info(port + "Creating entry " + host + " in " + CERT_PATH_ABS);
        KeyToolUtils.generateHostCert(CERT_PATH, this.storePassword, host, CERT_VALIDITY);
      }
      this.keyStore = getKeyStore(this.storePassword.toCharArray());
    }
    return this.keyStore;
}
  

 

对于这些过程,我们推荐使用jorpha.jar工具包来完成。

 

如果是iOS,比较标准验证的实现方式请参

【 

服务器使用https,自签名证书

iOS, 使用自签名证书https请求,(NSURLSession)

 

参考:

Java 实现TLS/SSL证书的自动安装校验

jmeter源码 jorpha.jar ,ApacheJMeter_http.jar

J2SE Socket SSL/TLS C/S模式编程

iOS使用自签名证书实现HTTPS请求

iOS开发HTTPS实现之信任SSL证书和自签名证书

JDK中利用keytool创建自签名证书

iOS 10 适配 ATS(app支持https通过App Store审核)

转载于:https://my.oschina.net/ososchina/blog/826768

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值