代码数字签名

合集下载

Java代码签名证书申请和使用方法

Java代码签名证书申请和使用方法

文档出处:/support/java_signing_guide.html第1步下载签名工具Step 1: Download Signing Tools如果您还没有签名工具,请到SUN公司网站免费下载:/j2se/,推荐下载JDK1.4.2或以上版本,支持Solaris SPARC/x86, Linux86 和Windows 操作系统。

If you have not already done so, download the Java 2 Software Development Kit (SDK). The latest version is available free of charge for the Solaris SPARC/x86, Linux86, and Microsoft Windows platforms from /j2se/.您将使用签名工具中的keytool, jar, jarsigner 来申请代码签名证书和数字签名您的代码。

You will be using the keytool, jar, and jarsigner to apply for your Code Signing C ertificate and sign your code.第2步申请签名证书Step 2: Enrollment(1) 生成私钥和公钥对(Keystore) Create a Keystore使用以下命令生成私钥和公钥对:To generate a public/private key pair, enter the following command, specifying a name for your keystore and an alias as well.c:\jdk1.5\bin\keytool -genkey -keyalg rsa -keystore <keystore_filename> -alias <alias_name>Keytool 会提示您输入私钥密码、您的姓名(Your name,填单位网址)、您的部门名称、单位名称、所在城市、所在省份和国家缩写(中国填:CN,其他国家填其缩写),单位名称一定要与证明文件上的名称一致,部门名称(OU)可以不填。

基于PKI技术代码签名实现原理以及应用

基于PKI技术代码签名实现原理以及应用
什 么 是 代 码 签 名 随着 网络的全球化普及蔓延趋势 ,各类病毒 ,恶意软件也随之泛 滥。 很多正规软件都被恶意注入木马和病毒发布 。 用户下载软件 时无法 确认软件的来源以及开发者 的真实身份 ,无法确定软件在传输过程 中 是否被非法篡改和破坏 。因此给软件代码签名就能有效地解决上述难


() 2 在高级证书 申请页面 , 选择“ 创建并 向 C A提交一个申请 ” 。 () 3 填写高级 申请信息 , 证书类 型选择 “ 代码签署证书”并提交。 , () 4 到证书颁发机构服务器端, 颁发证书 。 ( ) 次访问证书服务 We 5再 b页面 , 询挂起证书 , 查 并安装证书 。
科技信息
计 算机 与 网络
基 于 P I 术代 码签 名 实 坝原 理 以 及 应用 K技
苏州高博软 件技 术职 业学 院 张 娴
[ 摘 要] 代码签名是在应用软件上附加一个防伪和防篡改的数字签名来保护应用程序 不被 恶意修改。代码签名证书为解决 了软件 开发 中信 任 度 的 问题 , 得 软 件 开 发 商 能 对其 软 件 代 码 进 行数 字 签名 。 过 对 代 码 的数 字 签名 来 标 识 软 件 来 源 以及 软 件 开发 者 的 真 使 通 实身份 , 保证代码在 签名之后不被 恶意篡改。使 用户在下栽 已经签名 的代码时 , 能够有 效地验证该代码的可信 度。 [ 关键词 ] 代码 签名 P CA SG KI I NCODEE E X
C A是证书 的签发机构, 它是 P I K 的核心 。C A是 负责 签发证书 、 认 证证书 、 管理已颁发证书 的机关 。它要制定政策和具体步骤来验证 、 识 别用户身份 , 并对用户证书进行签名 , 以确保证书持有者 的身份 和公钥

Nokia MIDlet代码签名证书申请和使用方法

Nokia MIDlet代码签名证书申请和使用方法

文档出处:/support/Nokia_MIDlet_signing_guide.htmlVeriSign 和Thawte 的Java代码签名证书可以用于数字签名运行J2ME MIDlet(MIDP 2.0)代码,支持诺基亚和索爱等手机的MIDlet应用软件,运行签名后的MIDlet Suite就会显示软件发行商名称,否则会显示让用户不敢下载的警告“应用软件来源未知,继续?”。

同时,签名后访问网络等都不会弹出烦人的警告框了,让手机应用更加安全!但请注意:并不是所有手机都支持数字签名机制,Thawte Java代码签名证书对索爱手机支持多些,而VeriSign Java代码签名证书则对诺基亚手机支持多些,您可以提供使用两种证书签名的两种版本供用户选择安装,使得您的MIDlet软件适用手机范围更广和支持最多的手机型号。

本签名指南是基于Nokia Developer's Suite for J2ME 的使用指南编写,如果您还没有NDS forJ2ME,您到Nokia网站上下载NDS3.0签名工具。

或下载最新版的Carbide.j 1.5 开发工具。

请注意:您也可以直接使用Sun Java Wireless Toolkit 2.5.1 中文版来签名针对Nokia手机的MIDlet,如果您还没有此开发工具可以到SUN 网站上下载合适的开发工具同时,请一定要先参考:MIDP 2.0安全机制,充分理解MIDP 2.0的安全机制有助于签名MIDlet 的成功部署。

第1步创建Keystore和私钥Step 1. Create a Keystore and Key Pair:如图1所示,点击左边主菜单“Sign Application Package”,就会显示缺省的测试证书(default),如果您已经有了Java代码签名证书的密钥对(.sks文件)或您已经有了微软代码签名证书(.pfx)文件,则您可以点击“Import Key Pair”导入您的证书密钥对,导入时需要输入您的私钥密码。

Excel VBA编程 数字签名简介

Excel VBA编程  数字签名简介

Excel VBA 编程 数字签名简介数字签名是指宏或文档上电子的、基于加密的安全验证戳。

此签名确认宏或文档来自签发者且没有被篡改。

如果还没有数字证书,必须获取一个数字证书。

要在本地的计算机上测试宏项目,可以使用 Selfcert.exe 工具创建本地计算机的自签名证书。

1.获取数字证书以用于签名可以从商业证书颁发机构(CA)(证书颁发机构 (CA):一个商业组织,它颁发数字证书,跟踪被颁发证书的人员,对证书签名以验证其有效性,并跟踪被吊销或已过期的证书。

)或者从内部安全管理员或信息技术专业人员那里获取数字证书。

2.创建自己的数字证书以用于自签名由于自创建的数字证书不是由正规证书颁发机构颁发的,因此使用这样的证书签名的宏项目称为自签名项目。

Microsoft Office 只在个人证书存储区中拥有自签名证书的计算机上信任该证书。

要创建自签名数字证书,可在WindowsXP 系统下,执行【开始】|【程序】|【Microsoft Office 】|【Microsoft Office 工具】|【VBA 项目的数字证书】命令,打开【创建数据证书】对话框,在【您的证书名称】文本中框中,为该证书键入一个描述性名称,如“ycs ”当前系统用户,并单击【确定】按钮,如图3-26所示。

图3-26 创建自签名证书3.为宏项目进行数字签名在Excel 中对宏项目进行数字签名,可保持宏项目原始性,以保证宏项目不被宏病毒或其它的非开发人员对其进行恶意的修改。

打开包含宏项目的文档以及Visual Basic 编辑器,在Visual Basic 项目资源管理器中,选择要签名的项目。

然后执行【工具】|【数字签名】命令,打开【数字签名】对话框,并单击【选项】按钮,如图3-27所示。

提 示 要查看个人证书存储中的证书,打开 Windows Internet Explorer ,执行【工具】|【Internet 选项】命令,打开【Internet 选项】对话框。

数字签名的使用过程

数字签名的使用过程

数字签名的使用过程
数字签名是一种数字化的身份认证技术,通过数字化方式对文件
或数据进行加密,以保证安全性和真实性。

这种技术得到了广泛的应用,尤其在电子商务、电子合同和电子协议等领域使用广泛。

以下是
数字签名的具体使用过程:
1.创建密钥对
数字签名技术需要使用公钥和私钥,因此在使用数字签名技术之前,需要创建密钥对,即公钥和私钥。

通常,这个过程由数字证书颁
发机构(CA)来完成,CA是一个第三方机构,它以一种可靠的方式颁
发数字证书,证明某个公钥属于某个具体的实体。

2.签署文件
当需要签署一个文件时,必须使用私钥进行签名。

所谓的签名,
就是将私钥与原始文本数据结合在一起进行加密,得到一个唯一的代码。

这个代码只能由公钥来验证,因此,可以通过这种方式确定数字
签名的真实性和完整性。

3.验证签名
当一个数字签名被创建后,其他人就可以使用公钥来验证该签名
的真实性和完整性。

这个过程基本上是将原始的签名数据与使用公钥
所生成的代码进行比较。

如果签名数据和公钥生成的代码完全相同,
那么就验证成功。

数字签名技术已经成为一种重要的安全保障手段,不仅可以确保
数据在传输、存储和处理过程中不被篡改,而且可以保障数据的真实
性和完整性。

因此,在现代社会中,数字签名技术得到了广泛的应用,被各行各业所采用。

数字证书的分类

数字证书的分类

数字证书的分类数字证书是一种基于公钥加密技术的证书,被用于确保网络通信过程的安全性,保证服务器和客户端交换数据的真实性、完整性和保密性。

数字证书的种类在很大程度上影响了其在网络安全监测和身份认证中的作用。

数字证书的分类如下:第一类:个人数字证书个人数字证书主要用于个人身份认证、电子邮件签署、身份验证等用途。

这种证书是由数字证书颁发机构(CA,Certificate Authority)签发的,用于确保传输过程中数据的完整性和保密性。

申请个人数字证书需要提交个人相关信息并完成身份验证,证书有效期为一年或更长。

第二类:企业数字证书企业数字证书是用于公司或组织中的网络通信、文件传输等方面的认证。

这种证书涵盖了组织机构、域名证书等多种类型,可以通过向CA提交公司相关资料获得。

企业数字证书有效期通常长达三年。

企业数字证书的主要作用是实现网络身份验证、数据加密和数字签名验证等。

第三类:代码签名数字证书代码签名数字证书是专门用于签署可执行代码和脚本文件的证书,其主要作用是验证文件的来源、保证文件的完整性、防止黑客攻击和计算机病毒威胁等。

代码签名数字证书一般由CA签发,有效期根据需求可长可短。

第四类:时间戳数字证书时间戳数字证书用于证实某个文档或文件在特定时间内存在和未被修改。

它是一份时间戳证书,证明特定文档或数据的时间。

时间戳数字证书可以通过向CA申请获得,其有效期通常为一年,但可以获取长达十年的有效期。

综上所述,数字证书的分类比较多,不同类型的数字证书都具有一定的特点和应用场景。

个人、企业、代码签名和时间戳数字证书等都是为了网络通信的安全性和数据保密性而诞生,为我们的网络生活安全保驾护航。

Java代码实现文件添加数字签名、验证数字签名

Java代码实现文件添加数字签名、验证数字签名

Java代码实现⽂件添加数字签名、验证数字签名Linux下实现加签、验签1.使⽤OpenSSL ⽣成公钥和密钥;#⽤ OpenSSL, Linux 上⾃带,常⽤命令如下:#⽣成 RSA 私钥(传统格式的)openssl genrsa -out rsa_private_key.pem 1024#将传统格式的私钥转换成 PKCS#8 格式的(JAVA需要使⽤的私钥需要经过PKCS#8编码,PHP程序不需要,可以直接略过)openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt#⽣成 RSA 公钥openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem2.使⽤私钥对⽂件进⾏加签、并验证#有明⽂⽂件file.txt和RSA密钥rsa_private_key.pem#使⽤md5指令指定sha1算法,对file.txt进⾏签名,⽣成签名⽂件sign1.txtopenssl md5 -sha512 -sign rsa_private_key.pem -out data_xinbao.tar.gz.sign data_xinbao.tar.gz#使⽤md5指令指定sha1算法,对file.txt进⾏签名,⽣成签名⽂件sign1.txtopenssl dgst -sha512 -sign rsa_private_key.pem -out data_xinbao.tar.gz.sign data_xinbao.tar.gz#两个签名⽂件⼀样,说明两个指令完成相同的功能diff data_xinbao.tar.gz.sign data_xinbao1.tar.gz.sign#使⽤RSA公钥验证签名(verify参数),验证成功openssl md5 -verify rsa_public_key.pem -sha512 -signature data_xinbao1.tar.gz.sign data_xinbao.tar.gzopenssl dgst -verify rsa_public_key.pem -sha512 -signature data_xinbao.tar.gz.sign data_xinbao.tar.gz3.查看OpenSSL和帮助#通过下⾯命令可以查看openssl的参数说明$ openssl dgst -options are-c to output the digest with separating colons-r to output the digest in coreutils format-d to output debug info-hex output as hex dump-binary output in binary form-sign file sign digest using private key in file-verify file verify a signature using public key in file-prverify file verify a signature using private key in file-keyform arg key file format (PEM or ENGINE)-out filename output to filename rather than stdout-signature file signature to verify-sigopt nm:v signature parameter-hmac key create hashed MAC with key-mac algorithm create MAC (not neccessarily HMAC)-macopt nm:v MAC algorithm parameters or key-engine e use engine e, possibly a hardware device.-md4 to use the md4 message digest algorithm-md5 to use the md5 message digest algorithm-ripemd160 to use the ripemd160 message digest algorithm-sha to use the sha message digest algorithm-sha1 to use the sha1 message digest algorithm-sha224 to use the sha224 message digest algorithm-sha256 to use the sha256 message digest algorithm-sha384 to use the sha384 message digest algorithm-sha512 to use the sha512 message digest algorithm-whirlpool to use the whirlpool message digest algorithm4.拿加签的原⽂件和加签后的⽂件使⽤Java代码进⾏对⽐;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import java.io.*;import java.security.*;import java.security.interfaces.RSAPrivateKey;import java.security.interfaces.RSAPublicKey;import java.security.spec.InvalidKeySpecException;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Date;/*** 对⽂件加签、验签⼯具类* ⽣成私钥:openssl genrsa -out rsa_private_key.pem 1024* 私钥还不能直接被使⽤,需要进⾏PKCS#8编码:openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt* 根据私钥⽣成公钥:openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem* 使⽤私钥sha512签名:openssl dgst -sha512 -sign rsa_private_key.pem -out xx.tar.gz.sign xx.tar.gz* 使⽤公钥sha512验签:openssl dgst -verify rsa_public_key.pem -sha512 -signature xx.tar.gz.sign xx.tar.gz* @author XIHONGLIE* @date 2018-03-27*/public class RsaEncrypt {/*** rsa签名* @param data 待签名的字符串* @param priKey rsa私钥字符串* @return签名结果* @throws Exception 签名失败则抛出异常*/public byte[] rsaSign(byte[] data, RSAPrivateKey priKey)throws SignatureException {try {Signature signature = Signature.getInstance("SHA512withRSA");signature.initSign(priKey);signature.update(data);byte[] signed = signature.sign();return signed;} catch (Exception e) {throw new SignatureException("RSAcontent = " + data+ "; charset = ", e);}}/*** rsa验签* @param data 被签名的内容* @param sign 签名后的结果* @param pubKey rsa公钥* @return验签结果* @throws SignatureException 验签失败,则抛异常*/public boolean verify(byte[] data, byte[] sign, RSAPublicKey pubKey)throws SignatureException {try {Signature signature = Signature.getInstance("SHA512withRSA");signature.initVerify(pubKey);signature.update(data);return signature.verify(sign);} catch (Exception e) {e.printStackTrace();throw new SignatureException("RSA验证签名[content = " + data+ "; charset = " + "; signature = " + sign + "]发⽣异常!", e);}}/*** 私钥*/private RSAPrivateKey privateKey;/*** 公钥*/private RSAPublicKey publicKey;/*** 字节数据转字符串专⽤集合*/private static final char[] HEX_CHAR = { '0', '1', '2', '3', '4', '5', '6','7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };/*** 获取私钥* @return当前的私钥对象*/public RSAPrivateKey getPrivateKey() {return privateKey;}/*** 获取公钥* @return当前的公钥对象*/public RSAPublicKey getPublicKey() {return publicKey;}/*** 随机⽣成密钥对*/public void genKeyPair() {KeyPairGenerator keyPairGen = null;try {keyPairGen = KeyPairGenerator.getInstance("RSA");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}keyPairGen.initialize(1024, new SecureRandom());KeyPair keyPair = keyPairGen.generateKeyPair();this.privateKey = (RSAPrivateKey) keyPair.getPrivate();this.publicKey = (RSAPublicKey) keyPair.getPublic();}/*** 从.pem⽂件中取得私钥* @param filePath ⽂件路径* @return私钥*/public String getPrivateKeyFromFile(String filePath){String strPrivateKey = "";try {BufferedReader privateKey = new BufferedReader(new FileReader(filePath));String line = "";while((line = privateKey.readLine()) != null){strPrivateKey += line;}privateKey.close();strPrivateKey = strPrivateKey.replace("-----BEGIN PRIVATE KEY-----","").replace("-----END PRIVATE KEY-----",""); }catch (Exception e){e.printStackTrace();}return strPrivateKey;}/*** 从.pem⽂件中取得公钥* @param filePath ⽂件路径* @return公钥*/public String getPublicKeyFromFile(String filePath){String strPublicKey = "";try {BufferedReader publicKey = new BufferedReader(new FileReader(filePath));String line = "";while((line = publicKey.readLine()) != null){strPublicKey += line;}publicKey.close();strPublicKey = strPublicKey.replace("-----BEGIN PUBLIC KEY-----","").replace("-----END PUBLIC KEY-----","");}catch (Exception e){e.printStackTrace();}return strPublicKey;}/*** 从字符串中加载公钥* @param publicKeyStr 公钥数据字符串* @throws Exception 加载公钥时产⽣的异常*/public void loadPublicKey(String publicKeyStr) throws Exception {try {byte[] buffer = Base64Utils.decode(publicKeyStr);KeyFactory keyFactory = KeyFactory.getInstance("RSA");X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);this.publicKey = (RSAPublicKey) keyFactory.generatePublic(keySpec);} catch (NoSuchAlgorithmException e) {throw new Exception("⽆此算法");} catch (InvalidKeySpecException e) {throw new Exception("公钥⾮法");}catch (NullPointerException e) {throw new Exception("公钥数据为空");}}/*** 加载私钥* @param privateKeyStr 私钥⽂件名* @return是否成功* @throws Exception*/public void loadPrivateKey(String privateKeyStr) throws Exception {try {byte[] buffer = Base64Utils.decode(privateKeyStr);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer); KeyFactory keyFactory = KeyFactory.getInstance("RSA");this.privateKey = (RSAPrivateKey) keyFactory.generatePrivate(keySpec); } catch (NoSuchAlgorithmException e) {throw new Exception("⽆此算法");} catch (InvalidKeySpecException e) {throw new Exception("私钥⾮法");} catch (NullPointerException e) {throw new Exception("私钥数据为空");}}/*** 加密过程* @param publicKey 公钥* @param plainTextData 明⽂数据* @return* @throws Exception 加密过程中的异常信息*/public byte[] encrypt(RSAPublicKey publicKey, byte[] plainTextData) throws Exception {if (publicKey == null) {throw new Exception("加密公钥为空, 请设置");}Cipher cipher = null;try {cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] output = cipher.doFinal(plainTextData);return output;} catch (NoSuchAlgorithmException e) {throw new Exception("⽆此加密算法");} catch (NoSuchPaddingException e) {e.printStackTrace();return null;} catch (InvalidKeyException e) {throw new Exception("加密公钥⾮法,请检查");} catch (IllegalBlockSizeException e) {throw new Exception("明⽂长度⾮法");} catch (BadPaddingException e) {throw new Exception("明⽂数据已损坏");}}/*** 解密过程* @param privateKey 私钥* @param cipherData 密⽂数据* @return明⽂* @throws Exception 解密过程中的异常信息*/public byte[] decrypt(RSAPrivateKey privateKey, byte[] cipherData)throws Exception {if (privateKey == null) {throw new Exception("解密私钥为空, 请设置");}Cipher cipher = null;try {cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] output = cipher.doFinal(cipherData);return output;} catch (NoSuchAlgorithmException e) {throw new Exception("⽆此解密算法");} catch (NoSuchPaddingException e) {e.printStackTrace();return null;} catch (InvalidKeyException e) {throw new Exception("解密私钥⾮法,请检查");} catch (IllegalBlockSizeException e) {throw new Exception("密⽂长度⾮法");} catch (BadPaddingException e) {throw new Exception("密⽂数据已损坏");}}/*** 字节数据转⼗六进制字符串* @param data 输⼊数据* @return⼗六进制内容*/public static String byteArrayToString(byte[] data) {StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < data.length; i++) {// 取出字节的⾼四位作为索引得到相应的⼗六进制标识符注意⽆符号右移 stringBuilder.append(HEX_CHAR[(data[i] & 0xf0) >>> 4]);// 取出字节的低四位作为索引得到相应的⼗六进制标识符stringBuilder.append(HEX_CHAR[(data[i] & 0x0f)]);if (i < data.length - 1) {stringBuilder.append(' ');}}return stringBuilder.toString();}/*** btye转换hex函数* @param byteArray* @return*/public static String byteToHex(byte[] byteArray) {StringBuffer strBuff = new StringBuffer();for (int i = 0; i < byteArray.length; i++) {if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {strBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));} else {strBuff.append(Integer.toHexString(0xFF & byteArray[i]));}}return strBuff.toString();}/*** 以字节为单位读取⽂件,常⽤于读⼆进制⽂件,如图⽚、声⾳、影像等⽂件。

数字签名的名词解释是什么意思

数字签名的名词解释是什么意思

数字签名的名词解释是什么意思数字签名是当今信息时代中的一项重要技术,它在数据传输和信息安全方面发挥着关键的作用。

数字签名是一种用于验证文件、电子邮件或其他电子信息的方法,以确定其未被篡改并确保其来源的可靠性。

通过数字签名,可以确认信息的完整性、身份和真实性,从而有效预防数据篡改、伪造和不可信来源的问题。

数字签名采用了非对称加密算法的基本原理。

非对称加密算法是一种使用两个密钥(私钥和公钥)来加密和解密数据的方法。

发送方使用私钥对信息进行加密,同时生成一个数字签名,然后将加密后的信息和数字签名一起发送给接收方。

接收方使用发送方的公钥对加密信息进行解密,并使用发送方的公钥验证数字签名的有效性。

如果数字签名有效且与解密后的信息匹配,那么接收方就可以确认信息的完整性和来源的可靠性。

数字签名的过程是基于公钥基础设施(Public Key Infrastructure,PKI)构建的。

PKI是一套用于管理和验证公钥的系统,它由证书颁发机构(Certification Authority,CA)和注册中心(Registration Authority,RA)组成。

证书颁发机构负责发布数字证书,数字证书包含了公钥和其他相关信息,用于验证和识别证书持有者的身份。

注册中心则负责验证证书请求的合法性,并与证书颁发机构进行协调。

数字签名的工作原理是基于哈希算法的。

哈希算法是一种将任意长度的数据转换为固定长度散列值的函数,在数字签名中用于生成消息摘要。

发送方会先对原始信息应用哈希算法生成摘要,并使用自己的私钥对摘要进行加密,从而生成数字签名。

接收方则会使用发送方的公钥对数字签名进行解密,并对原始信息应用同样的哈希算法生成自己的摘要。

如果接收方生成的摘要与解密后的数字签名匹配,就表明原始信息未被篡改。

数字签名在信息安全领域有广泛的应用。

首先,它可以用于验证软件的完整性,确保软件在传输过程中没有被修改或植入恶意代码。

其次,数字签名也可以应用在电子邮件和文件传输中,确保信息内容的机密性和完整性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、概述
数字证书又称为数字标识(Digital Certificate,Digital ID)。

它提供了一种在Internet 上进行身份验证的方式,是用来标志和证明网络通信双方身份的数字信息文件,与司机驾照或日常生活中的身份证相似。

在网上进行电子商务活动时,交易双方需要使用数字证书来表明自己的身份,并使用数字证书来进行有关的交易操作。

通俗地讲,数字证书就是个人或单位在Internet 的身份证。

数字证书主要包括三方面的内容:证书所有者的信息、证书所有者的公开密钥和证书颁发机构的签名。

一个标准的X.509 数字证书包含(但不限于)以下内容:
证书的版本信息;
证书的序列号,每个证书都有一个唯一的证书序列号;
证书所使用的签名算法;
证书的发行机构名称(命名规则一般采用X.500 格式)及其私钥的签名;
证书的有效期;
证书使用者的名称及其公钥的信息。

在使用数字证书的过程中应用公开密钥加密技术,建立起一套严密的身份认证系统,实现: 除发送方和接收方外信息不被其他人窃取;
信息在传输过程中不被篡改;
接收方能够通过数字证书来确认发送方的身份;
发送方对于自己发送的信息不能抵赖。

代码签名证书主要颁发给软件开发商,用户在下栽、使用软件代码时,证书将证明软件代码的来源、完整性等信息,主要功能是让用户知道该软件代码是安全的并且没有被篡改过,用户可以安全地进行下载、使用。

本业务支持Microsoft Authenticode Techology、Netscape Object Signing、Ms Office 2000/VBA Macro Signing 等代码签名技术。

二、使用代码签名证书
在获得数字证书之前,您必须向一个合法的认证机构(例如:广东省电子商务认证中心)提交证书申请。

您需要填写书面的申请表格(试用型数字证书除外),向认证中心的证书申请审核机构(例如:广东省电子商务认证中心的代理点)提交相关的身份证明材料(如身份证、营业执照副本、组织机构代码证等)以供审核。

当您的申请通过审核并且交纳相关的费用后,证书申请审核机构会向您返回证书业务受理号和证书下载密码。

您通过这个证书业务受理号及下载密码,就可以到认证机构的网站上下载和安装证书了。

详细的证书申请与安装指南请参考 上“客户服务区”->“操作指南”->“使用手册”上的相关内容。

以下是微软的代码签名控件的使用说明。

详细的操作指南请参考微软提供的代码签名控件的广东省电子商务认证中心证书应用指南(codesign)说明文档。

2.1 利用证书对代码进行签名
2.1.1 第一步:下载微软的控件
在使用代码签名证书对程序员编写的程序代码进行签名之前,请到微软的网站上上下载代码签名的工具。

根据用户不同的环境要求,根据以下链接下载相对应驱动程序:
2.1.2 第二步:运行signcode.exe
保存并解压下载的文件后,请运行其中的执行文件signcode.exe,然后按照以下图示逐步完成代码签名的过程。

图1:运行signcode.exe
图2:选择需要签名的文件(代码)
图3:选择签名类型
图4:选择用来签名的证书
图5:选择您的代码签名证书(1)
图6:选择您的代码签名证书(2)
图7:对准备签名的文件(代码)进行描述
图8:建议不选择“将时间戳添加到数据中”
图9:点击该图中的“完成”键
图10:数字签名完成
2.2 查看代码的数字签名
用鼠标右键点击已经过数字签名的代码文件,选择“属性”,查看“属性”中的“数字签名”一栏,即可查看到对该文件进行的签名的证书信息,如下图。

如果“属性”中没有“数字签名”的信息,那证明签名签名失败或者文件没有经过数字签名。

图11:查看代码签名信息。

相关文档
最新文档