npm package: @heisea/ca
Description: 数字证书客户端通讯集合
Latest version: 0.9.20

# heisea/ca
***凯特*** CA依赖于[SecSeal客户端](http://img.udplat.org:11180/Ac035153111)，使用浏览器的WebSocket和本地客户端服务通讯，通讯时本地服务只处理接收到一条请求，数据响应后才能浏览器才能发送下一条请求。
当前函数会将所有执行的方法添加到`handles`队列中，请求返回后才会执行下一个请求。
***嘉恒*** 嘉恒采用http请求的方式,为了提高性能，所以方法都是异步执行的注意执行时的业务要求
[wiki](http://wiki.heisea.cn/pages/viewpage.action?pageId=35295020)
[嘉恒](http://101.132.67.155:8180/download/main.html)

***/lib/cert*** 兼容模式，未来讲通过嘉恒提供的兼容服务，支持和各ca厂商客户端通讯
## 更新说明

`v0.9.15`
1.优化 *** index.js *** `:57345`修改为只有加解密使用
`v0.9.14`
1. 修复 获得用户信息将不再提示需要签名，默认自动获取，保持和嘉恒一致
`v0.9.13`
1. 修复 getBaseImformation  凯特获得用户信息通用名失败的问题
`v0.9.12`
1. 新增 getBaseImformation  凯特获得用户信息

`v0.9.11`
1. 优化 ***cert.js handleCertDecrypt*** 返回修改为和index版一致

`v0.9.9`
1. 修复 *** index.js getBaseImformationJH *** 返回层级问题

`v0.9.8`
1. 新增 *** index.js getBaseImformationJH *** 获得证书所有信息

`v0.9.7`
1. 修复 ***index.js*** ，嘉恒只支持http请求并支撑跨域
2. 优化 ***file*** 当使用相对地址时自动添加当前域名

`v0.9.5`
1.  修复 ***cert.js*** ，获得序列号，“SerialNumber|DeviceInfo”

`v0.9.4`
1.  修复 ***cert.js*** ，服务器验签失败，当“请求验签服务器失败”为成功

`v.0.9.2`
1. 修复 ***cert.js*** 优化队列执行，需要在设置了mode，并且加载iframe时才允许执行

`v.0.9.1`
1. 修复 ***cert.js*** open方法重复执行的问题

`v.0.9.0`
1. 新增 ***cert.js*** 默认密码"111111",密码错误自动弹出密码输入框
2. 新增 jdzyca
3. 优化了部分代码

`v.0.8.13`
1. 新增 ***File*** 嘉恒`options.token` 存在时访问二维码请求

`v.0.8.13`
1. 新增 ***File*** 嘉恒`options.token` 存在时访问二维码请求

`v.0.8.12`
1. 修复 嘉恒请求地址不支持https

`v.0.8.11`
1. 修复 嘉恒请求地址不支持https

`v.0.8.10`
1. 修复 ***ca.handleFile*** 设置`ySin`为云签，`otpion.applySn,ySign:true`必须有企业唯一标识

`v.0.8.9`
1. 修复 ***lib/cer*** 设置`origin`为绝对地址是无法返回

`v.0.8.7`
1. 优化 ***lib/cert***  允许配置 `origin` 来修改 'https://apitest.jhsec.com.cn'

`v.0.8.6`
1. 修改 `handleFile` 修复过`file` 报错问题

`v.0.8.5`
1. 优化 ***lib/cert*** 弹窗层级优化

`v.0.8.4`
1. 优化 ***lib/cert*** 预览弹窗效果

`v.0.8.3`
1. 修复 ***lib/read*** 凯特 `Number(state.cur) === 1||Number(state.cur) === 0` 文件base重叠的问题

`v.0.8.2`
1. 修复 ***lib/read*** 凯特 `onmessage`覆盖的问题

`v.0.8.1`
1. 新增 ***lib/cert*** 添加`before(this,cb)`来等待后端返回配置后再执行队列

`v.0.8.0`
1. 新增 ***lib/cert*** 多证书兼容方案，新增类型mode = sxca 陕西ca

`v.0.7.3`
1. 优化 ***CA*** `handleFormatDevCB` 替换嘉恒格式化key接口

## 更新说明
`v.0.7.2`
1. 新增 ***CA*** `handleDelEmptyContainerJH` 嘉恒删除空白容器
2. 新增 ***CA*** `handlePdfVerifyJH` 嘉恒PDF文件验签


`v.0.7.1`
1. 添加 *** Read *** 缺少依赖提示

`v.0.7.0`
1. 更新客户端为`20210115003`
1. 修改嘉恒判断超时时间1500
1. 暴露`window.hxCert`签名客户端方法 `window.hxFileCert`预览客户端方法,减小 *** read *** 文件大小，使用依赖window的方式
1. 打包时添加版本号

`v.0.6.1`
1. 更新客户端为`20210115001`
1. 新增 ***CA*** `_CertEncryptionJH _CertDecryptJH`加密解密参数数组修改为JSON字符串
2. 修复 ***read*** 非盖章时调用`/hxstamp/v2/stampFile`
1. 优化 ***read*** 指定模式逻辑，但模式切换时自动重新初始化

`v.0.6.0`
1. 新增 ***CA*** `handleBatchDecrypt`批量解密
2. 修复 ***CA*** `SHECA`替换成`TOPCA`

`v0.5.9`
1. 优化 ***read*** 根据设备号来判断需要的客户端，因为章是存在场商的服务器上的

`v0.5.8`
1. 优化 判断客户执行`checkCertTime: 500,`后自动进入error逻辑
1. 修复 嘉恒服务校验随机码仅支持base64

`v0.5.7`
1. 优化 ***_CertEncryptionKT*** 凯特加密证书自动补齐添加`-----BEGIN CERTIFICATE-----`
1. 优化 ***read*** 预览接口替换成 `/hxstamp/v2/stampFileWaitUser`,并支持URL_PDF、URL_EDC传参数
1. 修复 ***KT*** 当返回返回 `undefined`时自动去匹配当前队列id，并在对方错误中返回

`v0.5.6 `
1. 优化 新增自动记住密码
2. 优化 批量解密嘉恒不再重复创建实例

`v0.5.5 20201127`
1. 修复 根据20201122001客户端兼容
2. 新增 默认进行版本版本判断

`v0.5.4`
1. 修复 ***read*** 快速点击预览时会同时打开嘉恒和凯特
2. 优化 ***read*** `EditFile`的嘉恒兼容

`v0.5.3`
1. 修复 ***read*** 嘉恒多次点击预览后，每关闭一次便会弹出对应次数的窗口,目前不允许用户在没关闭时触发预览

`v0.5.2`
1. 修复IE下`xhr.responseType = ajaxData.dataType`报错

`v0.5.1`
1. 修复 ***read*** 兼容凯特后无法初始化凯特方法的问题

`v0.5.0`
1. 优化 ***read*** 兼容识客户端

`v0.4.1`
1. 修复IE下`xhr.responseType = ajaxData.dataType`报错

`v0.4.0`
1. 新增:***Cert***方法`handleCertDecrypt`、`handleCertEncryption`原有加解密兼容嘉恒加解密
1. 新增:***CertEDecrypt***方法,兼容嘉恒批量解密


`v0.3.6`
1. 修复:`config.open`凯特时重复执行

`v0.3.5`
1. 修复：嘉恒连接不上客户端无提示
1. 修复：凯特初始化没有加入到队列的问题
1. 新增：***fileRead.js*** `OpenFileJH`、`EditFileJH`嘉恒签章方法

`v0.3.4`
1. 新增：新增嘉恒CA方法 `handleBaseDataJH`、`handleClientVersionJH`
2. 新增：兼容方法 `handleCertDataToPw`、`handleResetPass`、`handleCertDN`支持凯特嘉恒
3. 优化：`handleCertP10JH` 添加参数`UserPin`,`type`，获取证书请求支持传密码，请求类型
4. 优化：`handleWriteCertJH` 添加参数`UserPin`,`type`，写入证书信息支持传密码，写入类型

`v0.3.3`
1.修复：驱动判断执行顺序

`v0.3.2`
1.修复：嘉恒凯特的判断逻辑

`v0.3.0`

1. 新增：新增嘉恒CA方法 `handleHasKeyJH`、`handleCertP10JH`、`handleWriteCertJH`、`handleCertInfoJH`
2. 新增：兼容方法 `handleCertData`、`handleCertNumber`、`handleCertStartDate`、`handleCertStartDate`、`handleCertEndDate`、`handleCertName`、`handleFormatDevCB`、`handleCertKeySn`支持凯特嘉恒
3. 新增：***fileRead*** `EditFile` Promise 解决签章分包返回



`v0.2.7`s
1. 优化：***fileRead*** 添加客户端信息接收`config.onmessage`
1. 新增：初始化参数`{open:'连接成功调用',error:'重连失败调用'}` 成功失败钩子

`v0.2.6`
1. 修改：***fileRead*** 允许添加属性参数

`v0.2.4 `
1. 新增：`handleCertDN`新增获得证书拥有者DN

`v0.2.3 `
1. 修改：`handleUnlockUserPin`参数

`v0.2.1 `
1. 优化：成功判断优化

`v0.2.0 `
1. 新增：`handleResetPass`新增修改密码
2. 优化：重连次数限制

`v0.1.3 `
1. 优化：加解密过滤空换行
`v0.1.2 `
1. 优化：添加ie优先配置
2. 优化：默认写入时证书算法为`sm3SM2`
`v0.1.1 `
1. 修复：累计队列时超时

`v0.1.0 `
1. 新增：`handleFormatDevCB`ca格式化
1. 新增：*** @heisea/ca/lib/fileRead *** edc预览
1. 优化：`handleCertP10`去除默认会有制表符


`v0.0.6 `
1. 新增：签发信息获得和证书写入兼容版
`v0.0.5 `
1. 新增：签发信息获得和证书写入
`v0.0.4 `
1. 优化：加解密为ie浏览器时，切换为ie客户端模式进行

`v0.0.3 `
1. 修改：`handleCertKeyDate`修改为`handleCertKeyInfo`
2. 优化：在执行方法遇到链接断开时，自动重建链接
3. 修改：方法传参顺序


`v0.0.2`
1. 修改：`handleCertEncryption`的传参顺序 

`v0.0.1`
1. 第一版本


#### 兼容
+ chrome //谷歌
+ ie11 //IE
+ safari //mac safari
+ firefox // 火狐


## 目录说明

+ build 项目脚手架配置 
+ lib 生产用代码
+ src 源码
+ index.html demo

## 命令

进行开发
```bash
npm start
```

打包出生产版本 commonjs 版本
```bash

npm run build:common

``` 

打包出生产版本 在html可引入的版本
```bash

npm run build:var

``` 

### 发布代码 请直接在package.json 修改版本号

```bash
  npm version <newversion> | major | minor | patch]
```
#### 发布
```bash
 npm publish
```

## 安装

###### 配置NPM 地址

```bash
npm config set registry http://nexus.heisea.cn/nexus/content/groups/npm-all/	
```

###### 下载包
```bash
npm i @heisea/ca
```

## 使用

1.es6 引入方式 
```js
// 默认会挂载到window.hxCert
import CA from '@heisea/ca'

import CA from '@heisea/ca/lib/cert' // 嘉恒兼容工具,配置


```
2.初始化,以下为默认参数无需配置

```js
const Cert = new CA({
    url:'ws://127.0.0.1:31212/', // 服务器地址
    // 自定义提示信息
    noCartData:'请先获得CA签名', 
    noKSEnAndSign: 'KSEnAndSignCtl.ocx控件未安装！',
    noKey: '未检测到UKey或Ukey未登陆',
    newCert: '您未使用新版证书或未正确安装证书驱动',
    // 优先执行 
    ieFn:["Batch_EnvelopeDataByP7","Batch_UnenvelopeDataByP7",'CertId'],
    timeout:15000, //超时时间

})

```
配置说明

属性名 | 类型 | 说明
--- | --- | --- 
reconnection | Number | 失败重连次数，每次失败
open | Function | 首次连接成功调用，返回当前实例
error | Function | 重连失败调用
noCartData | String | 非必须 缺少签名提示
noKSEnAndSign | String | 非必须 缺少驱动提示
noKey | String | 非必须 未检测到证书
newCert | String | 缺少驱动
noUpdate | String| 超时提示
noUserPass | String | 口令错误
timeout |Number |超时时间ms
ieFn | Array | 优先执行IE方法 `{ Batch_EnvelopeDataByP7:加密, Batch_UnenvelopeDataByP7:解密,KSSKF_CreateCertReqCB:正式请求,KSSKF_GetDevSNCB:设备系列号,CertId:设备唯一码（ie）, KSSKF_WriteCertCB:写入正式书}` 默认加密加解密(极大的性能提升)


3.修改错误提示方式
```js
// 修改错误提示
CA.prototype.alert = (err)=>{
    if(window.App&&window.App.$message){
        window.App.$message.error(err)
    }else{
        console.error(err)
    }
}
```


4.方法使用
```js
 Cart.handleCertData().then(res => {
    console.log(res)
})

```
## ca 参数

属性名 | 类型 | 说明
--- | --- | --- 
url | String |  本地服务器地址 默认为'ws://127.0.0.1:31212/'
noCartData | String | 缺少CA签名提示
noKSEnAndSign | String | 客户端为安装
noKey | String | 未检测到UKey
newCert | String | 未检测到UKey
mode | String | 指定当前客户`JH`嘉恒、`KT`凯特 `sxca` 陕西ca `geca`格尔 
timeout| Number|超时时间 15000
reconnection | Number | 重连次数
versionJH | String | 嘉恒版本号
checkCertTime | Number | 检查客户端超时时间
before | Function(cert,cb) | ***/lib/cert*** 专用，cert 当前实例，cb回调执行回调后才开始执行队列请求
ifrmePath| Srting | ***/lib/cert*** 专用,设置cert.html 的地址
## 方法Promise
目前除`解密`外，都需要先获取CA签名,错误说错误会返回:
```js
{ 
    PluginRequest: "请求别名",
    PluginRequestID: "队列表号",
    PluginResponse: "错误原因",
    PluginResponseValue: "返回数据"
}
```

名称 | 兼容 | 参数 | 说明 
--- | --- |---| --- 
handleCertData |  | 随机数(String) | 通过随机数生成ca的签名，并保存到实例中，在之后的操作可以不需要传 {data:{ InData:'实例的随机', cartData:"加密的随机数",cart:"签名"}}
handleCertInfo | 凯特 |信息代码（String） 签名(Sting)  | 根据解析信息码获得对应的用户数据 {data:"数据"}
handleCertInfoJH | 嘉恒 | 对应键值 |获得证书信息 `data:{CommonName:'通用名',DeviceInfo:设备号、介质号，SerialNumber:序列号，ValidEndTime：结束数据，ValidStartTime：结束时间}`|
handleCertNumber | | 签名(Sting)| 获得系列号{data:"数据"}
handleCertName | |签名(Sting)| 获得通用名 {data:"数据"}
handleCertStartDate| | 签名(Sting)| 有效期开始时间 {data:"数据"}
handleCertEndDate | |签名(Sting)| 有效期结束时间  {data:"数据"}
handleFormatDevCB|嘉恒 凯特(v6.1)| 嘉恒 无 ; 配置(object 必填` bAdmin:非必填 操作员类型 0非管理员,DevSN:非必填 设备系列号,UserPin:用户口令,`)|格式化清空设备
handleCertAbout |嘉恒 凯特(v6.1) |配置(Object，非必须)| 设备信息 {data:"Array"}`arr[0]通用名,arr[1]:证书源，arr[2]:有效开始，arr[3]:有效结束，arr[4]:省(s),arr[5]:市(l)，arr[6]:机构名称(o)，arr[7]部门（ou），arr[8]:证书唯一码`值不存在时为空
handleCertP10 | 凯特(6.1) |经办人(string) 企业(String) userPW(用户口令) 配置(object 非必须 `l:市,s:省,c:国,OU,bAdmin:操作员类型 1 管理员,DevSN:设备系列号`)| 获得正式请求
handleCertP10JH | 嘉恒 |  `param.csrInfoBase64 Base64编码的证书信息字符串，由服务端接口返回，param.type 请求类型 1：新证、2：延期、3：变更` | 获得请求
handleCertKeySn | 凯特(6.1) |无| 获得证书系列号
handleCertId | 凯特（IE） |密码(非必填String)| 获得证书唯一码bjca的证书源是没有的
handleWriteCert | 凯特6.1   | 配置(object 必填`alg:证书签名算法 ie必填, bAdmin:非必填 操作员类型 1管理员,DevSN:设备系列号,signCert:证书,encPrvKey:私钥,encCert:证书,`)| 证书写入 {data:""}
handleWriteCertJH | 嘉恒 | `{ caType:'目前固定传TOPCA，由服务端接口返回',signCertBase64: '后端签发出的签名证书，由服务端接口返回',encryptCertBase64: '后端签发出的加密证书，由服务端接口返回',encryptPrivateKeyBase64: '后端签发出的加密证书私钥，由服务端接口返回',passwordBase64: 'key登录密码',type:'写入类型，1：新证、2：延期、3：变更'};` | 写入参数
handleCertEncryption | 兼容 | 内容（String,必须，Array） 签名(Sting) | 加密 `{data:"数据"||['数据','数据1']}` ，注意凯特客户端不支持数组
handleCertDecrypt | 兼容 |内容（String，必须，Array） | 解密 `{data:"数据"||['数据','数据1']}` 注意凯特客户端不支持数组
handleResetPass |嘉恒  凯特 |旧密码,新密码 | 修改密码
handleCertDataToPw |嘉恒  凯特 |密码 | 通过密码获取签名
handleClientVersionJH |嘉恒 |无 | 获取客户端版本号
handleBaseDataJH |嘉恒 | 签名(Sting) | 获取证书基本信息
handleBatchDecrypt| 嘉恒  凯特 | 密文（Array） |{"data":{"0":"解密1","1":"解密2"},"errorList":[ 错误 ]}
handleDelEmptyContainerJH |嘉恒 | 用户口令 | 删除空白容器
handlePdfVerifyJH |嘉恒 | `{pdfId:'',pdfBase64:''}` `[{pdfId:'',pdfBase64:''}]` | PDF文件验签 传入参数为Array，返回参数为Array，传入参数为Object，返回参数为Object `{PdfId:'',VerifySignResult:''}` 请求结果`VerifySignResult: 1验签成功 0验签失败`
handleFile | 兼容 | url | 盖章，返回 `{data:盖完章的base64 pdf,fileType:类型}`
getBaseImformation| 兼容 | 字段（String1）,签名（String2） | String1 根据字段返回参数,String2 签名 默认获得已经或取的签名


### 扩展src/fileRead
EDC预览插件

1.引入
```js
// 默认 会挂载到 window.HxFileCert 
import OpenFile from '@heisea/ca/lib/read';  

```
1.1 凯特IE 多窗口依赖 webpack.config.js,ie下会打开一个页面
```js
   new CopyWebpackPlugin([
        // 复制本地文件
        {
            from: path.resolve(__dirname, '@heisea/ca/lib/read.html'),
            to: path.resolve(__dirname, '../dist/read.html') //默认页面地址
        }
    ]),
```
1.2 嘉恒兼容模式，支持多客户端情况，但必须把cert.html打包到根目录
```js
   new CopyWebpackPlugin([
        // 复制本地文件
        {
            from: path.resolve(__dirname, '@heisea/ca/lib/cert.html'),
            to: path.resolve(__dirname, '../dist/cert.html') //默认页面地址
        }
    ]),
```

2.使用
```js
const url = 'http://bucket-cert-test.oss-cn-shanghai.aliyuncs.com/2019/12/55afadca-b348-4fa9-acea-8fd094f0a0ec.edc'
 OpenFile(url,{
     SetSealToolVis:true
 },config)
```

参数  | 说明 
--- | --- 
url| 地址
option|更多查看配置 `{SetSealToolVis:true} 显示盖章工具否则为预览不显示盖章工具`
config|配置 非必填

#### Config
参数  | 类型 | 说明 
--- | --- |---
noSeal| String |未安装驱动提醒
readPath| String |read.html 地址
ie| Boolean |是否启用ie模式 false
onmessage | Functon　| 客户端返回处理,`{msg:'返回信息',data:'base64||取消为空'}`
mode | String | ’JH‘ 嘉恒 “KT” 凯特,目前会优先匹配嘉恒

#### Option 凯特 

参数  | 类型 |说明 
--- |--- | ---
token | String | 当存在时使用二维码版本，必须通过手机扫描二维码获得服务返回的token
ySign | Boolean | 是否启用云签章
applySn | String | 企业信息唯一标识
OutFile | Sting | 默认'000',输出edc保存路径，如果传”000”：自动获取系统临时目录
AutoCloseDocument | Boolean | AutoCloseDocumt: true保存后是否要自动关闭exe,否则手动关闭
rightAllButton | Number | 以二进制的方式来进行控制，1为隐藏，0为显示，初始第1位为预留位。11个按钮如下：
1保存，2抄送，3盖章，4批量盖章，5签批，6撤消，7验证，8印章管理，9系统设置，10打印，11退出
例：我要保留验证、系统设置、打印、退出4个按钮，其余按钮隐藏，第1位填0，所得二进制值为000101111110，转成十字制为382
SetDocSignType | Number | 0为默认，1为只签名，2为加密
SetEditPdf | Boolean | false不允许编辑，true允许，默认不允许编辑
SetSealToolVis | Boolean | true 显示盖章工具栏，false 隐藏盖章工具栏
SetToolButtonVis | Number |-1：PDF工具栏不可见，具体详见前面文档介绍
GetEDCB64 | Boolean | true:输出edc文件后做B64编码，否则不做编码。
SetPrintable | Boolean | true为可打印，false为不可打印，默认状态为不可打印
PutIsPrin | Boolean | true 生成的EDC文件可以打印，否则不能打印
PutIsExportBlack | Boolean | true 生成的EDC文件可以抄送，否则不能抄送
PutIsCento | Boolean | true 生成的EDC文件可以摘录，否则不能摘录
PrintOut | Boolean | 默认为弹框自己选择打印机或者传参 `type=0|sPrinter=""|lCount=1|lFromPage=1|lToPage=maxPage`指定打印机传参:`type=1|sPrinter=Foxit PDF Printer|lCount=1|lFromPage=1|lToPage=maxPage`默认打印机：`type=2|sPrinter=""|lCount=1|lFromPage=1|lToPage=maxPage;`




### 解析代码（用户信息）

 参数 | 说明
--- | ---
0x00000001|证书版本
0x00000002|证书序列号
0x00000003|证书签名算法标识
0x00000004|证书颁发者国家(C)
0x00000005|证书颁发者组织名(O)
0x00000006|证书颁发者部门名(OU)
0x00000007|证书颁发者所在的省、自治区、直辖市(S)
0x00000008|证书颁发者通用名称(CN)
0x00000009|证书颁发者所在的城市、地区(L)
0x00000010|证书颁发者Email
0x00000011|证书有效期：起始日期
0x00000012|证书有效期：终止日期            
0x00000013|证书拥有者国家(C )
0x00000014|证书拥有者组织名(O)
0x00000015|证书拥有者部门名(OU)
0x00000016|证书拥有者所在的省、自治区、直辖市(S)
0x00000017|证书拥有者通用名称(CN)
0x00000018|证书拥有者所在的城市、地区(L)
0x00000019|证书拥有者Email
0x00000020|证书颁发者DN
0x00000021|证书拥有者DN
0x00000022|证书公钥信息
0x00000023|证书扩展项信息
0x00000024|颁发者密钥标识符
0x00000025|证书持有者密钥标识符
0x00000026|密钥用途
0x00000027|私钥有效期
0x00000028|证书策略
0x00000029|策略映射
0x00000030|基本限制
0x00000031|策略限制
0x00000032|扩展密钥用途
0x00000033|CRL发布点
0x00000034|netscape属性
0x00000035|证书实体唯一标识
0x00000036|个人身份证号码
0x00000037|个人社会保险号
0x00000038|企业工商注册号
0x00000039|企业组织机构代码
0x00000040|税务登记证号

## 嘉恒

服务地址：http://127.0.0.1:57344/zkha/seclib/getBaseImformation
`{
"ResultCode":"0", //0成功/非0失败
"ResultMsg":"Success", //结果信息（成功：Success、失败：其他值）
"ResultTip":"成功", //调用结果说明（中文为UTF-8编码）
"Version":"",// 证书版本
"Serial":"",// 证书序列号
"SignAlg":"",// 证书签名算法标识
"IssuerC":"",// 证书颁发者国家(C)
"IssuerO":"",// 证书颁发者组织名(O)
"IssuerOU":"",// 证书颁发者部门名(OU)
"IssuerS":"",// 证书颁发者所在的省、自治区、直辖市(S)
"IssuerCN":"",// 证书颁发者通用名称(CN)
"IssuerL":"",// 证书颁发者所在的城市、地区(L)
"IssuerE":"",// 证书颁发者Email
"NotBefore":"",// 证书有效期：起始日期
"After":"",// 证书有效期：终止日期
"SubjectC":"",// 证书拥有者国家(C )
"SubjectO":"",// 证书拥有者组织名(O)
"SubjectOU":"",// 证书拥有者部门名(OU)
"SubjectS":"",// 证书拥有者所在的省、自治区、直辖市(S)
"SubjectCN":"",// 证书拥有者通用名称(CN)
"SubjectL":"",// 证书拥有者所在的城市、地区(L)
"SubjectE":"",// 证书拥有者Email
"IssuerDN":"",// 证书颁发者DN
"SubjectDN":"",// 证书拥有者DN
"Pubkey":"",// 证书公钥信息
"Extensions":"",// 证书扩展项信息
"AuthoritykeyIDentifier":"",// 颁发者密钥标识符
"SubjectKeyIdentifier":"",// 证书持有者密钥标识符
"TaxationNumber":"",// 证书实体唯一标识
"OrganizationCode":"",// 企业组织机构代码
"IcRegistrationNumber":"",// 个人社会保险号
"InuranceNumber":"",// 企业工商注册号
"IdentifyCardNumber":"",// 个人身份证号码
"UniqueId":"",// 税务登记证号
}`