前言:

最近在做华为NB-IoT接口开发,需要用到双向认证,就去学了一下。

然后我将过程总结了一下。

相关华为论坛链接:http://developer.huawei.com/ict/forum/thread-25457.html

里面一些ca.jks和outgoing.CertwithKey.pkcs12相关步骤能看懂就看,看不懂没关系。

一:为服务器生成证书
1. 找到jdk安装目录,运行控制台,切换到该目录:

2、使用keytool命令生成证书tomcat.keystore

keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -validity 36500

以下是命令的参数介绍

keytool

-genkey

-alias tomcat(别名)

-keypass 123456(别名密码)

-keyalg RSA(算法)

-keysize 1024(密钥长度)

-validity 365(有效期,天单位)

-keystore tomcat.keystore(指定生成证书的位置和证书名称)

-storepass 123456(获取keystore信息的密码)

二:为客户端生成证书
1. 生成客户端证书:client.p12(为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12)
keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -validity 36500

三:让服务器信任客户端证书

由于不能直接将PKCS12格式的证书库导入,必须先把客户端证书导出为一个单独的CER文件

1. 将client.p12转换成client.cer;
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -rfc -file client.cer
2. 将client.cer导入到tomcat的信任证书链中
keytool -import -alias client-v -file client.cer -keystore tomcat.keystore
 

完成之后通过list命令查看服务器的证书库,

可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书:

keytool -list -v -keystore tomcat.keystore

四:让客户端信任服务器证书

由于是双向SSL认证

(1)、客户端也要验证服务器证书,因此,必须把服务器证书添加到浏览器的“受信任的根证书颁发机构”

(2)、服务器也要验证客户端提供的证书,因此,必须把client.p12证书添加到浏览器的“个人”证书里面(这步非常关键)。

由于不能直接将keystore格式的证书库导入,必须先把服务器证书导出为一个单独的CER文件

1. 把tomcat证书导出为tomcat.cer文件(导出根证书)
keytool -export -v -alias tomcat -file tomcat.cer -keystore tomcat.keystore

2、将tomcat.cer证书导入到受信任的根证书颁发机构,点击导入,按照步骤添加

然后一直下一步,最后选“是”

3、将client.p12添加到个人证书

然后一直下一步,最后选“是”。密码是之前生成客户端证书时候的密码。

五、配置tomcat的server.xml

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
keystoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.5\tomcat.keystore" keystorePass="123456"
truststoreFile="C:\Program Files\Apache Software Foundation\Tomcat 8.5\tomcat.keystore" truststorePass="123456"
/>
Connector标签中的属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码
 
最后访问8080端口,试下双向是否成功,然后将clientAuth=“false”试下单向认证。博主试过了可以成功。
 
不懂欢迎提问!尽力解答
 
最后附上权威机构颁发证书的认证方法(单向认证):http://www.cnblogs.com/longLifeFrog/p/9067147.html

使用jdk生成自签发证书(过程总结)的更多相关文章

  1. https学习笔记三----OpenSSL生成root CA及签发证书

    在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...

  2. OpenSSL生成root CA及签发证书

    一.openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用.健壮.功能完备的工具套件,用以支持SSL/TLS 协议的实现.官网:https://www.openss ...

  3. 用Keytool和OpenSSL生成和签发数字证书

    一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书      J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密 ...

  4. 使用jdk生成证书以及把证书导入到jdk中

    证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了JDK自带的证书生成工具keytool.当然在实际项目中你可以到专门的证书认证中心购买证书. 中文官方网 ...

  5. JDK生成证书:

    JDK生成证书: 在此之前确保本地已安装JDK1.6 1.生成客户端的私钥,客户端的证书 1)keytool -genkey -alias clientkey -keystore kclient.ke ...

  6. 使用jdk生成ssl证书文件

    java自带有 ssl 证书生成的工具, 在 /bin/keytools.exe 需要确认已经正确配置JAVA_HOME的环境变量 生成服务端证书: keytool -genkey -v -alias ...

  7. cmd命令生成android签名证书

    cmd命令生成android签名证书,有空在写一篇eclipse导出带签名的apk,这里面包括生成新的签名.现在还是讲讲在cmd怎么操作生成签名证书. 1.dos下进入JDK的bin目录 运行如下命令 ...

  8. Spring AOP高级——源码实现(3)AopProxy代理对象之JDK动态代理的创建过程

    spring-aop-4.3.7.RELEASE  在<Spring AOP高级——源码实现(1)动态代理技术>中介绍了两种动态代理技术,当然在Spring AOP中代理对象的生成也是运用 ...

  9. openssl 自建CA签发证书 网站https的ssl通信

    <<COMMENTX509 文件扩展名 首先我们要理解文件的扩展名代表什么.DER.PEM.CRT和CER这些扩展名经常令人困惑.很多人错误地认为这些扩展名可以互相代替.尽管的确有时候有些 ...

随机推荐

  1. FTP自动上传

    注:该脚本上传的压缩文件,通过文件资源管理器拿下来后会提示压缩文件损坏.使用 ftp -s:d:\audit_log\ftp_upload.txt 方法可行(http://www.cnblogs.co ...

  2. Tuxedo安装、配置、以及演示样例程序 (学习网址)

    Tuxedo安装.配置.以及演示样例程序 (学习网址): 1.http://liu9403.iteye.com/blog/1415684 2.http://www.cnblogs.com/fnng/a ...

  3. [转载] c++对结构体数组排序

    按结构体中某个成员进行排序,下面代码以成员b1为升序的排序 代码: #include<iostream> #include<algorithm> using namespace ...

  4. SVN There are unfinished transactions detected

    在ECLIPSE中报这个错,不能提交和更新代码和clean up 解决办法:关闭ECLIPSE,使用工具对SVN执行 clean up. 重新启动ECLIPSE,解决冲突文件,可以正常使用SVN

  5. BZOJ 1084 最大子矩阵 dp

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1084 题目大意: 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分 ...

  6. [枫叶学院] Unity3d高级开发教程 工具集(一) 哈希列表——强大的自己定义数据集

    在日常开发中.数据集合是我们不可缺少的重要工具之中的一个.在C#中,.Net Framework也为我们提供了种类繁多,功能多样的数据集工具.在此,我基于List<T> 和 HashTab ...

  7. 2018-2019-2 网络对抗技术 20165322 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165322 Exp3 免杀原理与实践 目录 实验内容与步骤 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳 ...

  8. SpringMVC如何解决POST请求中文乱码问题,GET的又如何处理呢?

    在web.xml中 <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-c ...

  9. 无网络环境下使用docker加载镜像

    无网络环境下使用docker加载镜像 你需要做的主要有3步骤:   先从一个有网络的电脑下载docker镜像 [root@localhost ~]# docker pull hub.c.163.com ...

  10. Mybatis Plus简介

    集成 MP Mybatis-Plus 的集成非常简单,对于 Spring,我们仅仅需要把 Mybatis 自带的MybatisSqlSessionFactoryBean替换为 MP 自带的即可. &l ...