⑴ 如何获取数字证书(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);
⑵ 你好,为什么小米那个指纹支付为啥支付不了啊还有那个证书也下载不了
从你的描述来看,你的小米指纹支付支付不了,而且证书也下载不下来。建议你实名认证一下。如果已经实名认证了,说明有权限。
⑶ 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;
}
}
⑷ 如何检查数字证书的指纹 – SSL证书数字签名网
证书的指纹( certificate’s thumbprint)是独一无二的标识符。微软Internet Explorer调用它按手印。浏览器倾向于以显版示它,就好像它是一个部分权的证书。它不是一个证书的一部分,但它是从它计算。
指纹是DER编码的证书信息,这是一个ASN.1类型的X.509规范的一部分指定为MD5摘要。
证书指纹是摘要(散列函数)的X509证书的二进制格式。它可以计算出不同的算法,如SHA1为Microsoft Internet Explorer,Netscape Navigator为MD5。
要检查证书的指纹和/或指纹,请执行以下步骤:
打开IE浏览器
转到“工具”>“Internet选项”
单击“内容”选项卡>“证书”
在“证书”窗口中,单击您要检查的证书(个人,其他人,中级证书颁发机构“,”受信任的根证书颁发机构“选项卡上的)
找到列表中的证书或根
双击进入
单击“详细信息”选项卡
滚动上按手印
详细信息将显示“指纹”
⑸ ssl证书 指纹算法 是什么意思
因特网的 超文本传输协议 (HTTP)使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算专法(如 DES 或 RC4)进行加密的。公用密钥算法(通常为 RSA)是用来属获得加密密钥交换和数字签名的,此算法使用服务器的SSL数字证书...
⑹ pkl证书丢了会不会微信不能指纹支付
如果说你的微信之前录了指纹的,就没有关系,就可以用指纹支付,如果之前没有录指纹,也许会有点影响,建议要把证书找回来比较好,后续办起事来也会方便一些
⑺ 计算机的证书中的指纹是什么意思
是一种形容词用法,
形容这个证书拥有独一无二的识别代码,
而且还是证书随身携带,别人偷不去的意思。就像你的指纹一样,别人想要有,除非把你的手指切了去。
⑻ TLS/SSL数字证书里的指纹算法、签名算法和签名哈希算法各是做什么用的
你好!
签名哈希算来法:签名之自前对证书主体部分进行哈希的算法,它和签名算法结合,是签名及认证的一部分。
指纹算法:是对签名之后的证书文件计算一下散列值,只是用于检测证书是否被篡改,类似于去网站下载一个安装包,严谨一点的网站会给一个MD5的值,便于你下载之后再MD5一下核对。
证书指纹何时用到?举个例子,在导入某CA根证书或证书链时,会去该CA官方网站下载相关证书,下载好了之后可以手工检查一下指纹,确认无误再导入。
⑼ android 指纹证书和包名 怎么获取
最近在做Android的平板的开发,想在桌面上预置一些第三方应用的Widget,在桌面预置Widget的方法就是要获得应用的包名和类名。
桌面预置widget的方法 在Launcher的配置文件 res/xml/default_workspace.xml中添加如下的代码:<appwidget
launcher:packageName="com.google.android.apps.genie.geniewidget"
//预置应用的包名
launcher:className="com.google.android.apps.genie.geniewidget.miniwidget.MiniWidgetProvider"
//预置应用的Provider的类名,不是Activity的类名
launcher:screen="1"//在第几屏0为第一屏,launcher:x="0"//x坐标launcher:y="0"//y坐标
launcher:spanX="4"//x方向占几个单元格
launcher:spanY="1"///y方向占几个单元格
通过logcat有时可以找到应用的包名和Provider类名,此方法不可取,容易出错。系统的widget可以通过查找相关的源码找到对应的包名和Provider的类名,但是第三方应用看不到源码,但是也可以通过反编译第三方应用,获得相应的Maifest.xml文件,找到对应的包名和Provider类名,但是此方法比较繁琐。
可以通过在Launcher中添加如下代码,可以将系统中所安装的所有 的widget的信息打印出来:
在Launcher.java中的onCreate方法中添加下面的代码:
List<=mAppWidgetManager.getInstalledProviders();finalintproviderCount=providers.size();for(inti=0;i<providerCount;i++){
ComponentNameprovider=providers.get(i).provider;Log.i("xxx",
"packagename:"
+provider.getPackageName()+
"classname:"
+provider.getClassName());}新编译Launcher,把Launcher push进去之后,执行 adb logcat -s xxx,就可以看到打印出来的Log信息,包名和Provider了类名。
桌面预置shortcut的方法:
在Launcher的配置文件 res/xml/default_workspace.xml中添加如下的代码:<favorites
⑽ 数字证书的签名哈希算法跟指纹算法都是指对摘要(指纹的)的编码吗
证书签名来使用的算法是发布源者自己规定的 使用自己的私钥对证书编码的哈希值进行加密 一般算法为md5withrsa或者sha256withrsa。哈希算法是唯一的 就是把证书编码转换为固定长度的2进制 这个过程不可逆 就是说无法通过哈希值还原证书编码。指纹算法就是哈希算法 一般都是sh1。证书认证的流程是证书所有者把证书和指纹(证书的哈希值并用私钥加密)发给用户 用户根据证书计算出一个哈希值 用公钥解密指纹得到一个哈希值 看一下两者是否相同 相同及证明证书未被篡改。算法是由所有者的私钥加密的。ca的作用是ca是可以认证一个证书链,源头就是ca 一旦你信任了这个ca 就是信任了ca发布的证书,这样你与ca发布的证书的所有者通信时可以根据证书链找到ca ca可信任了则这个发布者就是可信任的