【参考资料】
【1】https://www.cnblogs.com/junjiany/p/6273560.html
【2】https://blog.csdn.net/joah_li/article/details/77869918

X.509

X.509证书包含3个文件:

  1. key:服务器上的私钥,用于对发送给客户的数据进行加密,以及对客户用公钥发回的数据进行解密;
  2. csr:证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名;
  3. crt:由CA颁发机构签名,或者自签名的证书,包括持有者的公钥、持有者信息、签署人签名等;

其他格式

  1. PFX(Predecessor of PKCS#12) 证书,等价于CRT+私钥key,多用于IIS;
  2. JKS(Java Key Storage)证书,等价于CRT+私钥key,用java的keytool生成,多用于tomcat
  3. PEM(Privacy Enhanced Mail)证书,等价于CRT+私钥key,纯文本格式,多用于apache和nginx
  4. CER证书,即windows下的CRT,通常linux或unix下为CRT;

获取公钥代码

CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate)cf.generateCertificate(new FileInputStream("my.cer"));
PublicKey publicKey = cert.getPublicKey();
BASE64Encoder base64Encoder=new BASE64Encoder();
String publicKeyString = base64Encoder.encode(publicKey.getEncoded());
流程(正规流程)
  1. 创建一个私钥
    openssl genrsa -des3 -out www.fredric.com.key 4096
  1. 开始基于这个私钥再创建一个证书签名请求文件
    openssl req -new -key www.fredric.com.key -out www.fredric.com.csr
    这个创建的过程会包括国家、企业部门等
  1. 填写信息后完成对csr文件的创建
    openssl req -noout -text -in www.fredric.com.csr
  1. 向某个CA机构提交csr文件申请证书
  1. 申请通过后,下载CRT证书并配置到自己的nginx或者tomcat下;
流程(自签名)

区别主要在生成csr后,用自己的私钥签名一个证书

  1. 生成自签名证书
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
流程(创建私有CA)
  1. 创建CA的私钥
    openssl genrsa -des3 -out ca.key 4096
  1. 生成CA的自签名证书
    openssl req -new -x509 -days 365 -key ca.key -out ca.crt
  1. 下面的工作在待配置https的服务器上完成
    3.1 生成服务端私钥
    openssl genrsa -des3 -out server.key 4096
    3.2 创建对应私有CA的证书签名请求文件
    openssl req -new -key server.key -out server.csr
    3.3.用CA证书给上一步的csr文件进行签名并生成服务器的证书
    openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

备注:若双向认证则客户端也需要生成证书和私钥

keytool

keytool只能用来生成自签名的数字证书,而openssl可以对证书进行签发。

  1. 生成服务端签名证书
    keytool -genkey -alias test -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore test.keystore -storepass 123456
  1. 生成客户端签名证书
    keytool -genkey -alias client -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore client.p12 -storepass 123456
  1. 服务端信任客户端证书
    3.1 导出CER文件
    keytool -export -alias client -keystore client.p12 -storetype PKCS12 -keypass 123456 -file client.cer
    3.2 导入服务端证书库
    keytool -import -v -file client.cer -keystore test.keystore -storepass 123456
    备注:这里的keystore就是第一步的服务端生成证书
  1. 客户端信任服务端证书(如果需要双向)
    4.1 导出CER文件
    keytool -keystore test.keystore -export -alias test -file test.cer
    4.2 双击CER安装证书
  1. 在tomcat配置里增加 test.keystore
双向认证策略举例
  1. 服务端生成一个SSL秘钥对
    keytool -genkeypair -v
  2. 导出服务端的公钥
    keytool -export **.jks
  1. 客户端生成一个秘钥对
    keytool -genkeypair -v
  2. 将服务端公钥导入客户端证书
    keytool --importcert
  3. 导出客户端的公钥

5.1 由私钥生成公钥

openssl rsa -in $CLIENT_FILE_PREFIX.pem -out $CLIENT_FILE_PREFIX.nopass.pem -passin pass:$CLIENT_KEY_PASSWORD

5.2 截取字符串得到公钥

tail -n +$(($(grep -m1 -n -e '-----BEGIN CERTIFICATE' $CLIENT_FILE_PREFIX.pem | cut -d: -f1) )) \$CLIENT_FILE_PREFIX.pem >> $CLIENT_FILE_PREFIX.pub.pem

备注:由于PEM文件是纯文本格式,因此其公钥只要截取字符串BEGIN CERTIFICATE和END PUBLIC KEY中的字符串就可以。

  1. 在消息传输时,客户端带服务端和客户端自己的公钥(PEM证书)

6.1 单项认证(不需要客户端端公钥)

client.tls_set(ca_certs="mqttserver.pub.pem", certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED,tls_version=ssl.PROTOCOL_TLSv1, ciphers=None);

6.2 双向认证(需要客户端公钥)

client.tls_set(ca_certs="mqttserver.pub.pem", certfile="mqttclient.nopass.pem", keyfile=None, cert_reqs=ssl.CERT_REQUIRED,tls_version=ssl.PROTOCOL_TLSv1, ciphers=None);
  1. 在java 语言的编程中也可以直接采用jks文件,个人理解这个jks证书里包含了服务端的公钥和客户端的公钥;

安全证书相关知识补充相关推荐

  1. Python第二章相关知识补充

    经过这周的Python课堂,第二章的知识点可以说是被彻头彻尾地讲了一下,所以我在此将上一篇发布的博客内容也加以完善. 2.1.3 列表元素的删除 在学习了列表元素的增加以后,删除列表元素的方法也可以进 ...

  2. 【电路】【扩展】锂电池相关知识补充

    锂电池相关知识 因为看到别人做平衡车直接使用18650电池供电,整整齐齐地码了3颗在PCB上感觉十分优雅,所以自己也想要用18650做一个,奈何对这方面一无所知,索性把相关知识都学一遍吧. 因为网上资 ...

  3. 【必须】螺钉螺母相关知识补充

    本文主要介绍在电赛中制作机械结构时需要的螺丝.螺母.轴承等相关知识. 参考资料: 1.百度百科 2.不同的螺丝头型都有那些不同的用途?不同的螺丝头型都有那些不同的用途? 1.螺丝 在制作作品的时候,最 ...

  4. 加密解密数字证书相关知识

    随着电子商务的迅速发展,信息安全已成为焦点问题之一,尤其是网上支付和网络银行对信息安全的要求显得更为突出.为了能在因特网上开展安全的电子商务活动,公开密钥基础设施( PKI, Public Key I ...

  5. Exynos4412 Uboot 移植(六)—— 相关知识补充

    Uboot版本:u-boot-2013.01 一.gd结构体的定义与使用 gd_t 和 bd_t 是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递. gd_t 定义 ...

  6. Exynos4412 内核移植(七)—— 内核相关知识补充

    一.内核调试方法简单分析 1.addr2line: 解决oops错误   a -- oops消息 oops(也称 panic),称程序运行崩溃,程序崩溃后会产生oops消息.应用程序或内核线程的崩溃都 ...

  7. 【PIC单片机】-- ADC相关知识

    文章目录 文章目录 00 写在前面 01 ADC相关知识补充 02 芯片手册如何查看? 03 ADC有关的寄存器 04 ADC有关的寄存器 05 几个名词 06 结尾 00 写在前面 该系列的文章,源 ...

  8. https ssl证书的工作原理及使用相关知识收集

    https ssl证书的工作原理及使用相关知识收集 SSL 与 数字证书 的基本概念和工作原理 前言 SSL是让人头大的东西,看起来很复杂,我学过信息安全课,但是对SSL仍然是模糊一片.对于数字证书也 ...

  9. PKI与证书相关基本知识

    1.PKI体系 PKI/CA与数字证书_J.D.的博客-CSDN博客_pki数字证书 PKI/CA与数字证书_J.D.的博客-CSDN博客_pki数字证书 PKI基础设施:CA,RA,KMC,CRL, ...

最新文章

  1. 【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数
  2. [转载] C#面向对象设计模式纵横谈——12. Flyweight享元模式
  3. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论
  4. 一段话系列-QPS、TPS、PV是很么如何计算
  5. python代码案例详解-Python运算符重载详解及实例代码
  6. background-position—CSS设置背景图片的位置
  7. 云服务器 VNC 远程连接
  8. 工作108:swiper使用
  9. 实战:Redis 集群模式(下)
  10. python语言三大基本控制结构_Python基础(4) 控制结构
  11. 有可能导致HttpQueryInfo 执行时出现12150 错误的一个原因
  12. linux下nginx环境搭建
  13. 论文文献引用格式总结整理
  14. c语言题目详解——实现四舍五入
  15. PreparedStatement的使用
  16. Z600服务器是阵列硬盘,Z600 使用SAS卡,SAS硬盘组Raid 5
  17. linux与信息安全,网络与信息安全系统安全Linux系统安全.ppt
  18. 小波学习笔记——MATLAB
  19. QComboBox下拉框条目高度的调整
  20. NVDLA runtime vp 搭建

热门文章

  1. 09_为什么说饿汉式单例是线程安全的?
  2. 流畅的python第八章--对象引用 可变性 垃圾回收
  3. 美国国家网络安全综合纲领
  4. Linux下安装SEP遇到的问题
  5. 电子科技大学计算机院士,电子科技领域“最强”大学:电子科技大学or西安电子科技大学?...
  6. 辐射神经场算法——Wild-NeRF / Mipi-NeRF / BARF / NSVF / Semantic-NeRF / DSNeRF
  7. 『柱状图 三分法求极值 树状数组』
  8. miui9如何不自动杀进程_官方没有告诉你的MIUI9十大隐藏使用技巧,助你快速成为小米达人...
  9. UBuntu桌面美化记录
  10. 今天聊聊为什么说做外贸推广选谷歌比脸书好?