@heisea/ca
v0.9.20
Published
数字证书客户端通讯集合
Downloads
108
Keywords
Readme
heisea/ca
凯特 CA依赖于SecSeal客户端,使用浏览器的WebSocket和本地客户端服务通讯,通讯时本地服务只处理接收到一条请求,数据响应后才能浏览器才能发送下一条请求。
当前函数会将所有执行的方法添加到handles
队列中,请求返回后才会执行下一个请求。
嘉恒 嘉恒采用http请求的方式,为了提高性能,所以方法都是异步执行的注意执行时的业务要求
wiki
嘉恒
/lib/cert 兼容模式,未来讲通过嘉恒提供的兼容服务,支持和各ca厂商客户端通讯
更新说明
v0.9.15
1.优化 *** index.js *** :57345
修改为只有加解密使用
v0.9.14
- 修复 获得用户信息将不再提示需要签名,默认自动获取,保持和嘉恒一致
v0.9.13
- 修复 getBaseImformation 凯特获得用户信息通用名失败的问题
v0.9.12
- 新增 getBaseImformation 凯特获得用户信息
v0.9.11
- 优化 cert.js handleCertDecrypt 返回修改为和index版一致
v0.9.9
- 修复 *** index.js getBaseImformationJH *** 返回层级问题
v0.9.8
- 新增 *** index.js getBaseImformationJH *** 获得证书所有信息
v0.9.7
- 修复 index.js ,嘉恒只支持http请求并支撑跨域
- 优化 file 当使用相对地址时自动添加当前域名
v0.9.5
- 修复 cert.js ,获得序列号,“SerialNumber|DeviceInfo”
v0.9.4
- 修复 cert.js ,服务器验签失败,当“请求验签服务器失败”为成功
v.0.9.2
- 修复 cert.js 优化队列执行,需要在设置了mode,并且加载iframe时才允许执行
v.0.9.1
- 修复 cert.js open方法重复执行的问题
v.0.9.0
- 新增 cert.js 默认密码"111111",密码错误自动弹出密码输入框
- 新增 jdzyca
- 优化了部分代码
v.0.8.13
- 新增 File 嘉恒
options.token
存在时访问二维码请求
v.0.8.13
- 新增 File 嘉恒
options.token
存在时访问二维码请求
v.0.8.12
- 修复 嘉恒请求地址不支持https
v.0.8.11
- 修复 嘉恒请求地址不支持https
v.0.8.10
- 修复 ca.handleFile 设置
ySin
为云签,otpion.applySn,ySign:true
必须有企业唯一标识
v.0.8.9
- 修复 lib/cer 设置
origin
为绝对地址是无法返回
v.0.8.7
- 优化 lib/cert 允许配置
origin
来修改 'https://apitest.jhsec.com.cn'
v.0.8.6
- 修改
handleFile
修复过file
报错问题
v.0.8.5
- 优化 lib/cert 弹窗层级优化
v.0.8.4
- 优化 lib/cert 预览弹窗效果
v.0.8.3
- 修复 lib/read 凯特
Number(state.cur) === 1||Number(state.cur) === 0
文件base重叠的问题
v.0.8.2
- 修复 lib/read 凯特
onmessage
覆盖的问题
v.0.8.1
- 新增 lib/cert 添加
before(this,cb)
来等待后端返回配置后再执行队列
v.0.8.0
- 新增 lib/cert 多证书兼容方案,新增类型mode = sxca 陕西ca
v.0.7.3
- 优化 CA
handleFormatDevCB
替换嘉恒格式化key接口
更新说明
v.0.7.2
- 新增 CA
handleDelEmptyContainerJH
嘉恒删除空白容器 - 新增 CA
handlePdfVerifyJH
嘉恒PDF文件验签
v.0.7.1
- 添加 *** Read *** 缺少依赖提示
v.0.7.0
- 更新客户端为
20210115003
- 修改嘉恒判断超时时间1500
- 暴露
window.hxCert
签名客户端方法window.hxFileCert
预览客户端方法,减小 *** read *** 文件大小,使用依赖window的方式 - 打包时添加版本号
v.0.6.1
- 更新客户端为
20210115001
- 新增 CA
_CertEncryptionJH _CertDecryptJH
加密解密参数数组修改为JSON字符串 - 修复 read 非盖章时调用
/hxstamp/v2/stampFile
- 优化 read 指定模式逻辑,但模式切换时自动重新初始化
v.0.6.0
- 新增 CA
handleBatchDecrypt
批量解密 - 修复 CA
SHECA
替换成TOPCA
v0.5.9
- 优化 read 根据设备号来判断需要的客户端,因为章是存在场商的服务器上的
v0.5.8
- 优化 判断客户执行
checkCertTime: 500,
后自动进入error逻辑 - 修复 嘉恒服务校验随机码仅支持base64
v0.5.7
- 优化 _CertEncryptionKT 凯特加密证书自动补齐添加
-----BEGIN CERTIFICATE-----
- 优化 read 预览接口替换成
/hxstamp/v2/stampFileWaitUser
,并支持URL_PDF、URL_EDC传参数 - 修复 KT 当返回返回
undefined
时自动去匹配当前队列id,并在对方错误中返回
v0.5.6
- 优化 新增自动记住密码
- 优化 批量解密嘉恒不再重复创建实例
v0.5.5 20201127
- 修复 根据20201122001客户端兼容
- 新增 默认进行版本版本判断
v0.5.4
- 修复 read 快速点击预览时会同时打开嘉恒和凯特
- 优化 read
EditFile
的嘉恒兼容
v0.5.3
- 修复 read 嘉恒多次点击预览后,每关闭一次便会弹出对应次数的窗口,目前不允许用户在没关闭时触发预览
v0.5.2
- 修复IE下
xhr.responseType = ajaxData.dataType
报错
v0.5.1
- 修复 read 兼容凯特后无法初始化凯特方法的问题
v0.5.0
- 优化 read 兼容识客户端
v0.4.1
- 修复IE下
xhr.responseType = ajaxData.dataType
报错
v0.4.0
- 新增:Cert方法
handleCertDecrypt
、handleCertEncryption
原有加解密兼容嘉恒加解密 - 新增:CertEDecrypt方法,兼容嘉恒批量解密
v0.3.6
- 修复:
config.open
凯特时重复执行
v0.3.5
- 修复:嘉恒连接不上客户端无提示
- 修复:凯特初始化没有加入到队列的问题
- 新增:fileRead.js
OpenFileJH
、EditFileJH
嘉恒签章方法
v0.3.4
- 新增:新增嘉恒CA方法
handleBaseDataJH
、handleClientVersionJH
- 新增:兼容方法
handleCertDataToPw
、handleResetPass
、handleCertDN
支持凯特嘉恒 - 优化:
handleCertP10JH
添加参数UserPin
,type
,获取证书请求支持传密码,请求类型 - 优化:
handleWriteCertJH
添加参数UserPin
,type
,写入证书信息支持传密码,写入类型
v0.3.3
1.修复:驱动判断执行顺序
v0.3.2
1.修复:嘉恒凯特的判断逻辑
v0.3.0
- 新增:新增嘉恒CA方法
handleHasKeyJH
、handleCertP10JH
、handleWriteCertJH
、handleCertInfoJH
- 新增:兼容方法
handleCertData
、handleCertNumber
、handleCertStartDate
、handleCertStartDate
、handleCertEndDate
、handleCertName
、handleFormatDevCB
、handleCertKeySn
支持凯特嘉恒 - 新增:fileRead
EditFile
Promise 解决签章分包返回
v0.2.7
s
- 优化:fileRead 添加客户端信息接收
config.onmessage
- 新增:初始化参数
{open:'连接成功调用',error:'重连失败调用'}
成功失败钩子
v0.2.6
- 修改:fileRead 允许添加属性参数
v0.2.4
- 新增:
handleCertDN
新增获得证书拥有者DN
v0.2.3
- 修改:
handleUnlockUserPin
参数
v0.2.1
- 优化:成功判断优化
v0.2.0
- 新增:
handleResetPass
新增修改密码 - 优化:重连次数限制
v0.1.3
- 优化:加解密过滤空换行
v0.1.2
- 优化:添加ie优先配置
- 优化:默认写入时证书算法为
sm3SM2
v0.1.1
- 修复:累计队列时超时
v0.1.0
- 新增:
handleFormatDevCB
ca格式化 - 新增:*** @heisea/ca/lib/fileRead *** edc预览
- 优化:
handleCertP10
去除默认会有制表符
v0.0.6
- 新增:签发信息获得和证书写入兼容版
v0.0.5
- 新增:签发信息获得和证书写入
v0.0.4
- 优化:加解密为ie浏览器时,切换为ie客户端模式进行
v0.0.3
- 修改:
handleCertKeyDate
修改为handleCertKeyInfo
- 优化:在执行方法遇到链接断开时,自动重建链接
- 修改:方法传参顺序
v0.0.2
- 修改:
handleCertEncryption
的传参顺序
v0.0.1
- 第一版本
兼容
- chrome //谷歌
- ie11 //IE
- safari //mac safari
- firefox // 火狐
目录说明
- build 项目脚手架配置
- lib 生产用代码
- src 源码
- index.html demo
命令
进行开发
npm start
打包出生产版本 commonjs 版本
npm run build:common
打包出生产版本 在html可引入的版本
npm run build:var
发布代码 请直接在package.json 修改版本号
npm version <newversion> | major | minor | patch]
发布
npm publish
安装
配置NPM 地址
npm config set registry http://nexus.heisea.cn/nexus/content/groups/npm-all/
下载包
npm i @heisea/ca
使用
1.es6 引入方式
// 默认会挂载到window.hxCert
import CA from '@heisea/ca'
import CA from '@heisea/ca/lib/cert' // 嘉恒兼容工具,配置
2.初始化,以下为默认参数无需配置
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.修改错误提示方式
// 修改错误提示
CA.prototype.alert = (err)=>{
if(window.App&&window.App.$message){
window.App.$message.error(err)
}else{
console.error(err)
}
}
4.方法使用
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签名,错误说错误会返回:
{
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.引入
// 默认 会挂载到 window.HxFileCert
import OpenFile from '@heisea/ca/lib/read';
1.1 凯特IE 多窗口依赖 webpack.config.js,ie下会打开一个页面
new CopyWebpackPlugin([
// 复制本地文件
{
from: path.resolve(__dirname, '@heisea/ca/lib/read.html'),
to: path.resolve(__dirname, '../dist/read.html') //默认页面地址
}
]),
1.2 嘉恒兼容模式,支持多客户端情况,但必须把cert.html打包到根目录
new CopyWebpackPlugin([
// 复制本地文件
{
from: path.resolve(__dirname, '@heisea/ca/lib/cert.html'),
to: path.resolve(__dirname, '../dist/cert.html') //默认页面地址
}
]),
2.使用
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":"",// 税务登记证号
}