SSL认证之相关证书的生成

Posted justry_deng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSL认证之相关证书的生成相关的知识,希望对你有一定的参考价值。

目录

相关知识点之Kafka支持的认证处理

SSL相关证书的生成

服务器端SSL证书签发

准备工作:修改/etc/hosts文件,自定义一个hosts名

第一步:为了方便证书的保存管理,这里先专门创建几个目录来保存证书

第二步:生成server.keystore.jks文件(即:生成服务端的keystore文件)

第三步:生成CA认证证书(为了保证整个证书的安全性,需要使用CA进行证书的签名保证)

第四步:通过CA证书创建一个客户端端信任证书

第五步:通过CA证书创建一个服务端器端信任证书

第六步:服务器证书的签名处理

客户端SSL证书签发

第一步:导出客户端证书

第二步:将证书文件导入到客户端keystore

第三步:用CA给客户端证书进行签名处理

第四步:将CA证书导入到客户端keystore

第五步:将已签名的证书导入到客户端keystore


欢迎来到,我的世界!


相关知识点之Kafka支持的认证处理

  • JavaSSL认证
           SSL(Secure Socket Layer安全套接层),及其继任者传输层安全(Transport ;ayer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
  • Kerberos认证 + ACL鉴权
          Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。ACL则是在Kerberos的基础上进行的鉴权措施,一般Kerberos认证就够使用了。

SSL相关证书的生成

服务器端SSL证书签发

准备工作:修改/etc/hosts文件,自定义一个hosts名

注:windows的hosts文件在C:\\Windows\\System32\\drivers\\etc\\目录下。
注:修改/etc/hosts之后正常情况应该是保存之后立即生效的,但是有时不是。使用uname -a 可以查看hostname是多少,
       就可以知道是否修改生效了。如果没有,这时的策略有:1、重启机器 2、重启服务3、使用hostname命
       令【hostname 定义的主机名】。
说明:kafka2.0.x开始,将ssl.endpoint.identification.algorithm默认设置为了HTTPS,即:需要验证主机名,所以我们这
          里可以先配置一个主机名。
          追注:不论是否需要主机名验证,都推荐配置一下hosts,比较方便。

第一步:为了方便证书的保存管理,这里先专门创建几个目录来保存证书

                    mkdir -p /usr/ca/root,server,client,trust

注:这四个目录分别用来存放 根证书、服务端证书、客户端正式、受信任的证书。

第二步:生成server.keystore.jks文件(即:生成服务端的keystore文件)

keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -validity 365 -genkey -keypass ds1994 -keyalg RSA -dname "CN=kafka-single,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -storepass ds1994 -ext SAN=DNS:kafka-single

执行效果如图:

注:这里的警告是推荐我们使用pkcs12,不过官网使用的仍然是jks,忽略这个警告即可。
注:这里的-ext SAN=DNS:xxx需要指定xxx为我们定义的主机名;-dname中的CN也需要指定为我们定义的主机名。

keytool相关指令说明:

指令

含义

-alias

别名

-keystore

指定密钥库的名称(就像数据库一样的证书库,可以有很多个证书,cacerts这个文件是jre自带的, 也可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个)

-storepass

指定密钥库的密码

-keypass

指定别名条目的密码

-list

显示密钥库中的证书信息

-v

显示密钥库中的证书详细信息

-export

将别名指定的证书导出到文件

-file

参数指定导出到文件的文件名

-delete

删除密钥库中某条目

-import

将已签名数字证书导入密钥库

-keypasswd

修改密钥库中指定条目口令

-dname

指定证书拥有者信息。

其中,CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码

-keyalg

指定密钥的算法

-validity

指定创建的证书有效期多少天

-keysize

指定密钥长度

……

第三步:生成CA认证证书(为了保证整个证书的安全性,需要使用CA进行证书的签名保证)

提示:利用Linux自带的OpenSSL创建即可。

openssl req -new -x509 -keyout /usr/ca/root/ca-key -out /usr/ca/root/ca-cert -days 365 -passout pass:ds1994 -subj "/C=cn/ST=beijing/L=beijing/O=aspire/OU=aspire/CN=kafka-single"

执行效果如图:

第四步:通过CA证书创建一个客户端信任证书

keytool -keystore /usr/ca/trust/client.truststore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994

执行效果如图:

        ……

注:有了信任证书才可以进行证书有效性的检查。

注:以后的证书必须通过CA认证后才能使用。

第五步:通过CA证书创建一个服务端器端信任证书

keytool -keystore /usr/ca/trust/server.truststore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994

执行效果如图:

        ……

注:以后的证书必须通过CA认证后才能使用。

第六步:服务器证书的签名处理

第一小步:导出服务器端证书server.cert-file。

keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -certreq -file /usr/ca/server/server.cert-file -storepass ds1994

执行效果如图:

第二小步:用CA给服务器端证书进行签名处理

openssl x509 -req -CA /usr/ca/root/ca-cert -CAkey /usr/ca/root/ca-key -in /usr/ca/server/server.cert-file -out /usr/ca/server/server.cert-signed -days 365 -CAcreateserial -passin pass:ds1994

执行效果如图:

第三小步:将CA证书导入到服务器端keystore。

keytool -keystore /usr/ca/server/server.keystore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994

执行效果如图:

        ……

第四小步:将已签名的服务器证书导入到服务器keystore。

keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -import -file /usr/ca/server/server.cert-signed -storepass ds1994

执行效果如图:

注:到此步骤为止,其实就可以进行【Kafka配置SSL认证】环节了。不过为了以后方便,我们也可以提前将客户端
       的证书生成出来。


客户端SSL证书签发

说明:为了后续方便,我们干脆直接在这里就生成客户端的证书,在后续用到时直接可以复制现在生成的证书。(当然
           也可以等到客户端连接时在生成)。

第一步导出客户端证书

keytool -keystore /usr/ca/client/client.keystore.jks -alias ds-kafka-single -validity 365 -genkey -keypass ds1994 -dname "CN=kafka-single,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -ext SAN=DNS:kafka-single -storepass ds1994

执行效果如图:

第二步将证书文件导入到客户端keystore

keytool -keystore /usr/ca/server/server.keystore.jks -alias ds-kafka-single -validity 365 -genkey -keypass ds1994 -keyalg RSA -dname "CN=kafka-single,OU=aspire,O=aspire,L=beijing,S=beijing,C=cn" -storepass ds1994 -ext SAN=DNS:kafka-single

执行效果如图:

第三步用CA给客户端证书进行签名处理

openssl x509 -req -CA /usr/ca/root/ca-cert -CAkey /usr/ca/root/ca-key -in /usr/ca/client/client.cert-file -out /usr/ca/client/client.cert-signed -days 365 -CAcreateserial -passin pass:ds1994

执行效果如图:

第四步将CA证书导入到客户端keystore

keytool -keystore /usr/ca/client/client.keystore.jks -alias CARoot -import -file /usr/ca/root/ca-cert -storepass ds1994

执行效果如图:

        ……

第五步将已签名的证书导入到客户端keystore

keytool -keystore /usr/ca/client/client.keystore.jks -alias ds-kafka-single -import -file /usr/ca/client/client.cert-signed -storepass ds1994

执行效果如图:

 

声明:本文为学习笔记,学习自51CTO,《Kafka消息中间件》,讲师李兴华

^_^ 如有不当之处,欢迎指正

^_^ 学习视频:
             
《Kafka消息中间件》,讲师李兴华

^_^ 参考链接:
              
http://kafka.apache.org/documentation/

^_^ 本文已经被收录进《程序员成长笔记(四)》,笔者JustryDeng

以上是关于SSL认证之相关证书的生成的主要内容,如果未能解决你的问题,请参考以下文章

如何生成自签名双向认证证书 ssl

nginx和iis下的SSL双向认证教程【ca 自签 ssl证书】

关于Nginx 用户认证SSL证书生成配置的一些笔记

关于Nginx 用户认证SSL证书生成配置的一些笔记

ssl认证证书SSL 证书基本概念证书格式openssl和keytool的区别

SSL证书之神秘预证书