openssl之相关概念

一、术语

  • SSL,安全套接字层(Secure Socket Layer)的缩写。

  • TLS,传输层安全协议(Transport Layer Security)的缩写,建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。

  • KEY,通常指私钥。

  • CSR,证书签名请求(Certificate Signing Request)的缩写,这不是证书,可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构。

  • CRT,certificate的缩写,即证书。

  • X.509,是一种证书格式,对X.509证书来说,认证者总是CA或由CA指定的人,一份X.509证书是一些标准字段的集合,这些字段包含有关用户或设备及其相应公钥的信息。X.509的证书文件,该文件的内容编码格式,可以分为以下二种格式:
    (1)PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是BASE64编码。Apache和*NIX服务器偏向于使用这种编码格式,一般以.crt结尾,例如:server.crt。
    (2)DER - Distinguished Encoding Rules,打开看是二进制格式,不可读。Java和Windows服务器偏向于使用这种编码格式,一般以.cer结尾,例如:server.cer。
    密钥的两种格式转换方式:

    • openssl rsa -inform DER -in server.key -outform PEM -out server.key
    • openssl rsa -inform PEM -in server.key -outform DER -out server.key

    证书的两种格式转换方式:

    • openssl x509 -inform DER -in server.cer -outform PEM -out server.crt
    • openssl x509 -inform PEM -in server.crt -outform DER -out server.cer

二、创建证书

        openssl相当于ssl的一个实现,如果把ssl规范看成面向对象中的接口,那么openssl则认为是接口的实现。

1、说明

(1)SSL单向认证

  • 服务器需要:server证书、server私钥。
  • 客户端需要:不需要证书。

(2)SSL双向认证

  • 服务器需要:server证书、server私钥。
  • 客户端需要:client证书、client私钥。

2、创建CA根证书

  • 创建CA证书私钥文件(PEM)
openssl genrsa -aes256 -out ca.key 2048

-aes256用于指定私钥将使用aes256算法进行加密。

  • 创建证书签名请求文件
    信息参数含义如下:
            C — 国家(Country Name),2个字母
            ST — 省份(State or Province Name)
            L — 城市(Locality Name)
            O — 组织或企业(Organization Name)
            OU — 部门(Organizational Unit Name)
            CN — 域名或IP(Common Name)
            emailAddress — 邮箱(Email Address)
openssl req -new -sha256 -key ca.key -out ca.csr -subj "/C=CN/ST=FJ/L=XM/O=JH/OU=dev/CN=www.demo.com/emailAddress=admin@jh.com"
  • 自签名证书
openssl x509 -req -days 36500 -sha256 -signkey ca.key -in ca.csr -out ca.crt

3、生成服务器证书

  • 创建服务器私钥
openssl genrsa -aes256 -out server.key 2048
  • 生成服务器公钥
openssl rsa -in server.key -pubout -out server.pub
  • 创建证书签名请求文件
openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CN/ST=FJ/L=XM/O=JH/OU=dev/CN=www.demo.com/emailAddress=admin@jh.com"
  • 使用CA根证书签名服务器证书
openssl x509 -req -days 36500 -sha256 -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

4、生成客户端证书

  • 生成客户端私钥
openssl genrsa -aes256 -out client.key 2048
  • 创建证书签名请求文件
openssl req -new -sha256 -key client.key -out client.csr -subj "/C=CN/ST=FJ/L=XM/O=JH/OU=dev/CN=www.demo.com/emailAddress=admin@jh.com"
  • 使用CA根证书签名客户端证书
openssl x509 -req -days 36500 -sha256 -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt

5、说明

        如果要在google等浏览器显示出安全的绿锁标志,自己颁发的证书肯定不好使,得花钱向第三方权威证书颁发机构申请(即:第2步中的创建CA根证书变为购买,然后第3步中的签发工作是交给权威机构来做,我们只需要提交server.csr,然后权威机构会返回给我们server.crt)。

三、keytool工具

1、创建证书和密钥

        keytool是Java原生自带的密钥和证书管理工具,方便用户能够管理自己的公钥/私钥及证书,用于认证服务。它将密钥(key)和证书(certificates)存储在keystore文件中。例如:

keytool -genkey -keyalg RSA -keysize 2048 -validity 3650 -alias server -keystore "/home/server.keystore"
  • -genkey:表示生成密钥对(公钥和私钥)。
  • -keyalg:指定密钥的算法,如:RSA、DSA(如果不指定默认采用DSA)。
  • -keysize:密钥长度,默认2048。
  • -validity:指定创建的证书有效期多少天,默认90天。
  • -alias:指定密钥条目的别名,该别名是公开的。
  • -keystore:用于指定密钥仓库文件名称及其位置。

例如:
在这里插入图片描述

2、导出证书

  • DER格式:keytool -export -alias server -keystore "/home/server.keystore" -file server.cer,例如:
    在这里插入图片描述
  • PEM格式:keytool -export -alias server -keystore "/home/server.keystore" -rfc -file server.crt,例如:
    在这里插入图片描述

3、将客户端证书导入到服务器端信任的keystore里

keytool -import -alias client -keystore servertrust.keystore -file 客户端证书文件(如:DER格式client.cer或PEM格式client.crt)

4、导出私钥

(1)得到pkcs12格式的证书

keytool -importkeystore -srckeystore "/home/server.keystore" -destkeystore server.p12 -deststoretype pkcs12

(2)转化成PEM格式的文件

openssl pkcs12 -in server.p12 -out server.pem

(3)提取私钥

使用记事本打开server.pem文件,找到私钥对应的内容块,拷贝到独立文件,例如:server.key。例如:
在这里插入图片描述

四、经验总结

1、在浏览器上无法和WSS服务建立连接

问题: 在本地搭建了一个websocket的wss服务,访问地址为:wss://127.0.0.1:4444,本地实现简单的websocket客户端连接,如:

var ws = new WebSocket("wss://127.0.0.1:4444"); // 创建WebSocket连接

无法和wss服务建立连接。不同浏览器现象不一致。

(1)Firefox

浏览器报错
在这里插入图片描述

wss服务报错
在这里插入图片描述
解决方案

  • 打开浏览器“设置”->“隐私与安全”->“查看证书”。
    在这里插入图片描述

  • 选择“服务器”标签页,点击“添加例外”按钮,输入wss服务地址和端口,点击“获取证书”。需要保证127.0.0.1:4444当下是可访问的。
    在这里插入图片描述

  • 选中“永久保存此例外”,点击“确认安全例外”。
    在这里插入图片描述
    结果如:
    在这里插入图片描述
    此时再刷新下页面,结果如:
    在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值