A. TLS/SSL数字证书里的指纹算法、签名算法和签名哈希算法各是做什么用的
你好!
签名哈希算来法:签名之自前对证书主体部分进行哈希的算法,它和签名算法结合,是签名及认证的一部分。
指纹算法:是对签名之后的证书文件计算一下散列值,只是用于检测证书是否被篡改,类似于去网站下载一个安装包,严谨一点的网站会给一个MD5的值,便于你下载之后再MD5一下核对。
证书指纹何时用到?举个例子,在导入某CA根证书或证书链时,会去该CA官方网站下载相关证书,下载好了之后可以手工检查一下指纹,确认无误再导入。
B. 关于驾驶证指纹
如何强化对驾驶员培训工作的管理,切实提高驾驶员培训质量,减少“马路杀手”,向社会输送合格学员,已经成为摆在行业主管部门面前的一个重要课题。深圳指昂科技有限公司通过与交通行业主管部门的全面合作,成功研制了“指纹IC卡计时驾驶员培训管理系统”项目。
该项目的实施,旨在通过技术手段全面提升驾驶员培训管理的科学化,规范化和信息化水平,规范驾校的市场竞争行为和教练员的执教行为,确保学员能够按照交通部门制定的教学计划和教学大纲规定的学时要求,高质量完成培训。
系统特点:
◆智能化的指纹评估和自适应指纹模板生成算法,可根据指纹质量自动调整指纹模板生成法
◆基于指纹的验证方式,保证了每条驾培信息的真实性、可靠性;
◆实时计时、计程,能自动区分场训、道训、日训、夜训;
◆ 提供对教练员的评价功能,以完善对教练员的管理;
◆采用手持式的结构设计,既有安装使用方便的特点;
◆ 采用汉字液晶显示和声音提示,具有操作方便的特点;
◆采用独特的电源设计,提高设备的抗电冲击和抗干扰能力;
◆信息在设备、IC卡、计算机系统中均为双备份设计。防止信息丢失;
◆根据管理需求,驾驶员培训管理软件可以在线升级。
系统概况:
驾驶员培训指纹IC卡计时管理系统主要由车载式驾驶员培训管理器、驾驶员驾培IC卡和配套的管理软件组成,其根本出发点是采用指纹身份鉴别技术和IC卡技术,利用指纹验证教练员和驾驶员的身份,通过在训练过程中实时记录训练时间和训练里程的方法,客观记录驾驶员的训练信息,实现对驾驶员培训的科学化、规范化、信息化管理。
系统组成及功能详述: 驾驶员培训指纹IC卡计时管理系统主要由车载式驾驶员培训管理设备、理论驾驶员培训管理设备、模拟器驾驶员培训管理设备、IC卡制卡设备、驾驶员培训IC卡和配套的管理软件组成。
一、驾驶员培训管理器
驾驶员培训管理器安装在培训车辆上,和车辆相连,在车辆行驶过程中,可实时记录车辆行驶的时间数据和里程数据。驾驶员培训管理器具有以指纹方式验证教练员和学员身份的功能,在学员训练过程中实时记录训练时间和训练里程信息,自动区分场地训练、道路训练、白天训练和夜间训练,可以将训练数据保存到学员的IC卡中,并可查询学员IC卡中的训练信息,对参加培训的学员进行管理。
1) 开机自检功能
驾驶员培训管理器具有自检功能,开机后可自动检查设备的主要部件运行是否正常,并以语音和显示提示。
2) 系统自动恢复功能
驾驶员培训管理器具有数据自动恢复功能,关闭或断开设备电源后再次为设备加电时,设备会自动恢复到关闭前的运行状态,所有信息均不会丢失
3) 教练员身份指纹验证功能
驾驶员培训管理器具有以指纹方式验证教练员身份的功能。
4) 学员身份指纹验证功能
驾驶员培训管理器具有以指纹方式验证学员身份的功能,杜绝训练中和考试中的冒名顶替问题发生。
5) 实时记录学员训练时间和里程数据、自动区分训练类型
驾驶员培训管理器能在学员训练过程中,实时记录训练时间和里程数据、自动区分场地训练、道路训练等训练类型,并可将训练信息保存到IC卡中。
6) 学员对教练员的满意度评估功能
驾驶员培训管理器提供学员对教练员满意度评估功能,学员可以输入对教练员的满意度信息,设备会自动记录该信息,并将满意度信息保存到IC卡中。
7) 系统参数设置功能
驾驶员培训管理器具有对K系数、日期、时间和验证指纹的时间间隔进行设置的功能,允许有权限的操作人员对上述的信息进行动态设置。
二、驾培应用IC卡
驾培应用IC卡分为:教练员IC卡、学员IC卡、管理员IC卡和考官IC卡四种类型。其中,使用管理员IC卡,可以对驾驶员培训管理器中的参数进行设置,考官IC卡供交警部门的考官使用。
在教练员和学员IC卡中存储有持卡人的编号、姓名、指纹信息(保存两只手指的指纹数据)和训练数据等信息。其中编号信息、姓名信息和指纹信息是在制卡时写入的,训练数据是在教练员或驾驶员训练过程中由驾驶员培训管理器实时写入的。
在驾驶员IC卡中存储的训练数据不仅仅存储训练的累计时间和累计里程数据,还存储每次训练的明细信息。每条明细信息中包括每次训练的日期、起始时间和中止时间、训练类型、训练时间和训练里程等信息。使用驾驶员培训管理软件和制卡设备可以将学员IC卡中的信息采集到计算机中。
◆系统扩展:
驾驶员培训指纹IC卡计时管理系统可完成对驾驶员培训的管理,客观记录驾驶员的训练信息,作为评定驾驶员训练水平的依据。在驾驶员管理过程中,除培训外,还包括驾驶员报名、驾驶员理论考试、驾驶员体检、驾驶员考试和驾驶员日常管理等多个环节。驾驶员管理的法规也可能发生变化。因此,在指纹IC卡计时驾驶员培训管理系统的设计中,充分考虑了系统的可伸缩性和扩展性。
同时,在硬件体系结构的设计上也考虑了硬件设备的扩展性。通过升级硬件设备中的嵌入式软件,即可实现指纹IC卡计时驾驶员培训管理系统的功能扩展。
C. ssl证书 指纹算法 是什么意思
因特网的 超文本传输协议 (HTTP)使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算专法(如 DES 或 RC4)进行加密的。公用密钥算法(通常为 RSA)是用来属获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书...
D. java代码怎么获取数字的证书那一串20位指纹
通过JAVA来读取数字证书的方法获取20位指纹:
CARead.java文件代码:
public class CARead extends JPanel {
private String CA_Name;
private String CA_ItemData[][] = new String[9][2];
private String[] columnNames = { "证书字段标记", "内容" };
public CARead(String CertName) {
CA_Name = CertName;
/* 三个Panel用来显示证书内容 */
JTabbedPane tabbedPane = new JTabbedPane();
JPanel panelNormal = new JPanel();
tabbedPane.addTab("普通信息", panelNormal);
JPanel panelAll = new JPanel();
panelAll.setLayout(new BorderLayout());
tabbedPane.addTab("所有信息", panelAll);
JPanel panelBase64 = new JPanel();
panelBase64.setLayout(new BorderLayout());
tabbedPane.addTab("Base64编码形式的信息", panelBase64);
/* 读取证书常规信息 */
Read_Normal(panelNormal);
/* 读取证书文件字符串表示内容 */
Read_Bin(panelAll);
/* 以Base64编码形式读取证书文件的信息 */
Read_Raw(panelBase64);
tabbedPane.setSelectedIndex(0);
setLayout(new GridLayout(1, 1));
add(tabbedPane);
}
private int Read_Normal(JPanel panel) {
String Field;
try {
CertificateFactory certificate_factory = CertificateFactory
.getInstance("X.509");
FileInputStream file_inputstream = new FileInputStream(CA_Name);
X509Certificate x509certificate = (X509Certificate) certificate_factory
.generateCertificate(file_inputstream);
Field = x509certificate.getType();
CA_ItemData[0][0] = "类型";
CA_ItemData[0][1] = Field;
Field = Integer.toString(x509certificate.getVersion());
CA_ItemData[1][0] = "版本";
CA_ItemData[1][1] = Field;
Field = x509certificate.getSubjectDN().getName();
CA_ItemData[2][0] = "标题";
CA_ItemData[2][1] = Field;
Field=x509certificate.getNotBefore().toString();//得到开始有效日期
CA_ItemData[3][0] = "开始有效日期";
CA_ItemData[3][1] = Field;
Field=x509certificate. getNotAfter().toString();//得到截止日期
CA_ItemData[4][0] = "截止日期";
CA_ItemData[4][1] = Field;
Field=x509certificate.getSerialNumber().toString(16);//得到序列号
CA_ItemData[5][0] = "序列号";
CA_ItemData[5][1] = Field;
Field=x509certificate.getIssuerDN().getName();//得到发行者名
CA_ItemData[6][0] = "发行者名";
CA_ItemData[6][1] = Field;
Field=x509certificate.getSigAlgName();//得到签名算法
CA_ItemData[7][0] = "签名算法";
CA_ItemData[7][1] = Field;
Field=x509certificate.getPublicKey().getAlgorithm();//得到公钥算法
CA_ItemData[8][0] = "公钥算法";
CA_ItemData[8][1] = Field;
//关闭输入流对象
file_inputstream.close();
final JTable table = new JTable(CA_ItemData, columnNames);
TableColumn tc = null; //表格列控制
tc = table.getColumnModel().getColumn(1);//得到表头
tc.setPreferredWidth(600);//设置宽度
panel.add(table);//增加到布局面板
} catch (Exception exception) {
exception.printStackTrace(); //异常捕获、
return -1;
}
return 0;
}
//读取二进制指纹文件
private int Read_Bin(JPanel panel) {
try {
FileInputStream file_inputstream = new FileInputStream(CA_Name);
DataInputStream data_inputstream = new DataInputStream(
file_inputstream);
CertificateFactory certificatefactory = CertificateFactory
.getInstance("X.509");
byte[] bytes = new byte[data_inputstream.available()];
data_inputstream.readFully(bytes);
ByteArrayInputStream s = new ByteArrayInputStream(bytes);
JEditorPane Cert_EditorPane;
Cert_EditorPane = new JEditorPane();
X509Certificate cert=null;
//遍历得到所有的证书属性
if (s.available() > 0)
{
cert = (X509Certificate) certificatefactory .generateCertificate(s);
Cert_EditorPane.setText(cert.toString());
}
Cert_EditorPane.disable();
JScrollPane edit_scroll = new JScrollPane(Cert_EditorPane);
panel.add(edit_scroll);
file_inputstream.close();
data_inputstream.close();
} catch (Exception exception) {
exception.printStackTrace();
return -1;
}
return 0;
}
private int Read_Raw(JPanel panel) {
try {
JEditorPane Cert_EditorPane = new JEditorPane();
StringBuffer strBuffer =new StringBuffer();
File inputFile = new File(CA_Name);
FileReader in = new FileReader(inputFile);
char[] buf = new char[2000];
int len = in.read(buf, 0, 2000);
for (int i = 1; i < len; i++) {
strBuffer.append(buf[i]);
}
in.close();
Cert_EditorPane.setText(strBuffer.toString());
Cert_EditorPane.disable();
JScrollPane edit_scroll = new JScrollPane(Cert_EditorPane);
panel.add(edit_scroll);
} catch (Exception exception) {
exception.printStackTrace();
return -1;
}
return 0;
}
}
E. 经典哈希算法里的seed能换成别的数字吗
证书签名使用的算法是发布者自己规定的 使用自己的私钥对证书编码的哈希值进行加密 一般算法为md5withrsa或者sha256withrsa。哈希算法是唯一的 就是把证书编码转换为固定长度的2进制 这个过程不可逆 就是说无法通过哈希值还原证书编码。指纹算法就是哈希算法 一般都是sh1。证书认证的流程是证书所有者把证书和指纹(证书的哈希值并用私钥加密)发给用户 用户根据证书计算出一个哈希值 用公钥解密指纹得到一个哈希值 看一下两者是否相同 相同及证明证书未被篡改。算法是由所有者的私钥加密的。ca的作用是ca是可以认证一个证书链,源头就是ca 一旦你信任了这个ca 就是信任了ca发布的证书,这样你与ca发布的证书的所有者通信时可以根据证书链找到ca ca可信任了则这个发布者就是可信任的
F. 加密技术的证书
证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。
证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509 国际标准。
加密:
我们将文字转换成不能直接阅读的形式(即密文)的过程称为加密。
解密:
我们将密文转换成能够直接阅读的文字(即明文)的过程称为解密。
如何在电子文档上实现签名的目的呢?我们可以使用数字签名。RSA公钥体制可实现对数字信息的数字签名,方法如下:
信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在传递过程中未被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数) 生成的。对这些HASH函数的特殊要求是:
1.接受的输入报文数据没有长度限制;
2.对任何输入报文数据生成固定长度的摘要(数字指纹)输出;
3.从报文能方便地算出摘要;
4.难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要;
5.难以生成两个不同的报文具有相同的摘要。
验证:
收方在收到信息后用如下的步骤验证您的签名:
1.使用自己的私钥将信息转为明文;
2.使用发信方的公钥从数字签名部分得到原摘要;
3.收方对您所发送的源信息进行hash运算,也产生一个摘要;
4.收方比较两个摘要,如果两者相同,则可以证明信息签名者的身份。
如果两摘要内容不符,会说明什么原因呢?
可能对摘要进行签名所用的私钥不是签名者的私钥,这就表明信息的签名者不可信;也可能收到的信息根本就不是签名者发送的信息,信息在传输过程中已经遭到破坏或篡改。
G. 如何检查数字证书的指纹 – SSL证书数字签名网
证书的指纹( certificate’s thumbprint)是独一无二的标识符。微软Internet Explorer调用它按手印。浏览器倾向于以显版示它,就好像它是一个部分权的证书。它不是一个证书的一部分,但它是从它计算。
指纹是DER编码的证书信息,这是一个ASN.1类型的X.509规范的一部分指定为MD5摘要。
证书指纹是摘要(散列函数)的X509证书的二进制格式。它可以计算出不同的算法,如SHA1为Microsoft Internet Explorer,Netscape Navigator为MD5。
要检查证书的指纹和/或指纹,请执行以下步骤:
打开IE浏览器
转到“工具”>“Internet选项”
单击“内容”选项卡>“证书”
在“证书”窗口中,单击您要检查的证书(个人,其他人,中级证书颁发机构“,”受信任的根证书颁发机构“选项卡上的)
找到列表中的证书或根
双击进入
单击“详细信息”选项卡
滚动上按手印
详细信息将显示“指纹”
H. 如何获取数字证书(x509Certificate)中的指纹算法
创建X509证书方法较多,在Windows 环境下大致总结了几中办法,
1) 通过CA获取证书,
2) 通过微软提供的makecert 工具得到测试证书
3) 编程的方法创建,.Net提供了 X509Certificate2 类,该类可以用于创建证书,但只能从RawData中创建,创建后无法修改除FriendlyName以外的任何属性。
我在互联网上找了很久,始终没有找到完全通过程序创建自定义的证书的方法。后来想了一个折中办法,就是用程序调用 makecert.exe 先生成一个证书,证书的一些参数如Subject,有效期,序列号等可以通过参数传入,然后把生成的证书文件读到Rawdata中,得到X509Certificate2 类型的证书对象。当然这种方法确实比较笨,必须要依赖外部进程。等后面有时间的话,我还是想按照X509 V3 标准,自己创建RawData,然后生成证书,这样应该是比较灵活的做法。不知道网友们有没有什么更好的方法来创建一个自定义的证书。
通过 makecert.exe 创建X509证书的代码如下,供大家参考
static object semObj = new object();
/// <summary>
/// 自定义的证书信息
/// </summary>
public class T_CertInfo
{
public String FriendlyName;
public String Subject;
public DateTime BeginDate;
public DateTime EndDate;
public int SerialNumber;
}
/// <summary>
/// 生成X509证书
/// </summary>
/// <param name="makecrtPath">makecert进程的目录</param>
/// <param name="crtPath">证书文件临时目录</param>
/// <param name="certInfo">证书信息</param>
/// <returns></returns>
public static X509Certificate2 CreateCertificate(String makecrtPath, String crtPath,
T_CertInfo certInfo)
{
Debug.Assert(certInfo != null);
Debug.Assert(certInfo.Subject != null);
string MakeCert = makecrtPath + "makecert.exe";
string fileName = crtPath + "cer";
string userName = Guid.NewGuid().ToString();
StringBuilder arguments = new StringBuilder();
arguments.AppendFormat("-r -n \"{0}\" -ss my -sr currentuser -sky exchange ",
certInfo.Subject);
if (certInfo.SerialNumber > 0)
{
arguments.AppendFormat("-# {0} ", certInfo.SerialNumber);
}
arguments.AppendFormat("-b {0} ", certInfo.BeginDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("-e {0} ", certInfo.EndDate.ToString(@"MM\/dd\/yyyy"));
arguments.AppendFormat("\"{0}\"", fileName);