凯特 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
npm version <newversion> | major | minor | patch]
npm publish
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)
})
属性名 | 类型 | 说明 |
---|---|---|
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 的地址 |
目前除解密
外,都需要先获取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:"数据" |
handleCertDecrypt | 兼容 | 内容(String,必须,Array) | 解密 `{data:"数据" |
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 签名 默认获得已经或取的签名 |
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 | 配置 非必填 |
参数 | 类型 | 说明 |
---|---|---|
noSeal | String | 未安装驱动提醒 |
readPath | String | read.html 地址 |
ie | Boolean | 是否启用ie模式 false |
onmessage | Functon | 客户端返回处理,`{msg:'返回信息',data:'base64 |
mode | String | ’JH‘ 嘉恒 “KT” 凯特,目前会优先匹配嘉恒 |
参数 | 类型 | 说明 |
---|---|---|
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 |
参数 | 说明 |
---|---|
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":"",// 税务登记证号 }