openssl获取证书信息Word文档格式.docx
《openssl获取证书信息Word文档格式.docx》由会员分享,可在线阅读,更多相关《openssl获取证书信息Word文档格式.docx(5页珍藏版)》请在冰豆网上搜索。
serial
(8)cA签署服务器证书:
opensslca-days365-keyfileprivate/ca.key-certcacert.pem-outdir./-inserver.csr-out
server.pem
(9)转换证书格式:
opensslx509-inserver.pem-outcerts/server.crt
opensslx509-incacert.pem-outcerts/cacert.crt
(10)产生Java客户端私钥文件:
keytool-genkey-keyalgRsA-aliasztyhotelservice-keystoreztyhotelservice.jks-storepassf1l89rmy-storetypejks
(11)产生Java客户端证书请求:
keytool-certreq-aliasztyhotelservice-keyalgRsA-fileztyhotelservice.csr-keystore
ztyhotelservice.jks
(12)cA签署Java客户端证书:
opensslca-days365-keyfileprivate/ca.key-certcacert.pem-outdir./-inztyhotelservice.csr-outztyhotelservice.pem
(13)转换格式:
opensslx509-inztyhotelservice.pem-outcerts/ztyhotelservice.cer
(14)导入cA证书到jks文件并信任之(由此cA所签署的所有证书也因此在信任之列):
keytool-import-aliasroot-trustcacerts-filecerts/cacert.crt-keystoreztyhotelservice.jks
(15)导入自己的证书到jks文件(至此,此jks文件包括了建立ssL连接所需所有信息):
keytool-import-aliasztyhotelservice-trustcacerts-filecerts/ztyhotelservice.cer
-keystoreztyhotelservice.jks
(16)转换成pkcs12格式,为客户端安装所用
opensslpkcs12-export-clcerts-inclient.crt-inkeyclient.key-outclient.pfx
篇二:
openssL命令常用证书操作
在openssL开发包中,包含一个实用工具:
openssl,比如我用mingwgcc编译openssL0.9.8k后,openssl就保存在out目录下。
openssl工具是完成密钥、证书操作和其它ssL事务的入口环境,直接运行不带参数的openssl命令后,可以得到一个shell环境,在其中可以以交互的方式完成ssL相关的安全事务。
不过有时,如果用一个带参数选项的openssl命令完成操作,会更方便。
下面是我使用openssl做证书操作时,记录的常用命令用法。
1.生成密钥
生成RsA密钥,保存在file.key中,命令如下:
上面命令的含义是:
产生RsA密钥,包括:
私钥和公钥两部分,然后使用Des3算法,用用户输入的密码(passphrase)加密该密钥数据,保存在file.key中。
file.key默认以方式编码密钥数据,file.key的格式称为:
pem(privacyenhancedmail)格式,在RFc1421到RFc1424中定义,pem是早期用来进行安全电子邮件传输的标准,但现在广泛用在证书、证书请求、pKcs#7对象的存储上,所以证书文件也经常以.pem为扩展名。
2.不加密的密钥
如果在生成密钥时,使用了-des3等加密选项,则会生成被用户密码保护的加密密钥,以增强密钥数据的保密性(因为密钥文件中包含私钥部分)。
但有时为了方便,需要不加密的明文密钥(这样安全性会降低),比如:
使用
Apache的hTTps服务,每次启动Apache服务时,都需要用户输入保护密钥的密码,感觉麻烦的话,可以使用明文密钥。
明文密钥可以使用不带-des3等加密选项的openssl命令生成,还可以使用以下命令将加密保护的密钥转换成明文密钥,当然转换过程需要用户输入原来的加密保护密码:
3.查看密钥
查看保存在file.key中的RsA密钥的细节,如果此文件是加密保护的,会提示用户输入加密此文件的密码,命令如下:
输出的内容均是RsA密钥数据的数学信息(模数、指数、质数等),从输出的结果中也可知file.key保存的RsA密钥数据包括:
私钥和公钥两部分。
该命令也能查看其它工具生成的密钥,比如ssh,只要密钥文件符合openssl支持的格式。
4.生成证书请求
由file.key产生一个证书请求(certificateRequest),保证在file.csr中,命令如下:
指定时,默认会访问unix格式的默认路径:
/usr/local/ssl/f。
创建证书请求时,会要求用户输入一些身份信息,示例如下:
注意:
产生的证书请求文件file.csr,也采用bAse64编码的字符格式。
?
Dn(Distinguishedname)为这个证书请求的标识,上面这些输入的内容,即是组成Dn的字段(field),其中有些可以留空,比如:
额外属性(extraattributes)。
Dn的概念也在LDAp中存在,参考:
,所以通常用LDAp来管理证书。
输入点号(.),表示这一字段留空。
cn(commonname)这项很重要,当创建的证书用于网站时,此项应该为该网站的FQDn,假如以后使用此证书的网站的域名与证书里的不匹配时,浏览器将报错。
5.查看证书请求
显示证书请求file.csr的细节,命令如下:
比如,会显示创建证书请求时,用户输入的信息:
subject:
c=cn,sT=shaanxi,L=xian,o=zy-home,cn=zy-root/emailAddress=zy-root@zy-home.org
6.签发证书:
自签
可以使用一个密钥文件.key,对证书请求file.csr进行签名,生成证书file.cer(certificate)。
如果使用证书请求file.csr自己的密钥文件file.key来签名,称为自签,命令如下:
对证书请求的签名,实际使用的是密钥文件.key中的私钥部分数据。
如果.key是加密保护的,则会提示用户输入密码。
7.签发证书:
使用cA证书签名
如果使用另一个证书file1.cer及其密钥文件file1.key,对一个证书请求file2.csr进行签名,则使用下面命令:
个包含证书file2.cer序号的文件:
file1.srl,注意:
这个序号文件的名称,是以签名证书的cA名字命名的。
实际工作中,用来签名的file1.cer和file1.key,通常由一个认证授权者(cA-certificateAuthority)提供,而这个签名过程也在认证授权者内部完成,因为file1.key中包含这个认证授权者自己的私钥部分数据,不能暴露到外部。
cA:
certificateAuthority,它的名字翻译过来有很多种:
认证授权者,权威机构,认证中心。
cA是以角色和功能来定义的,它的形式可以是个人、
组织、机构、政府等等,但一般大家公信的cA通常是一些大的安全公司、机构、政府部门等,例如:
Verisign、Thawte。
8.查看证书
?
可以使用sunJRe/JDK中的keytool,来显示证书file.cer的
也可以用openssl的命令显示证书file.cer的细节:
篇三:
openssl实现证书操作
数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。
它是由一个由权威机构-----cA机构,又称为证书授权(certificateAuthority)中心发行的,人们可以在网上用它来识别对方的身份。
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。
最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名
数字证书是一种权威性的电子文档,由权威公正的第三方机构,即cA中心签发的证书。
它以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性。
使用了数字证书,即使您发送的信息在网上被他人截获,甚至您丢失了个人的账户、密码等信息,仍可以保证您的账户、资金安全。
它能提供在Internet上进行身份验证的一种权威性电子文档,人们可以在互联网交往中用它来证明自己的身份和识别对方的身份。
当然在数字证书认证的过程中证书认证中心(cA)作为权威的、公正的、可信赖的第三方,其作用是至关重要的.如何判断数字认证中心公正第三方的地位是权威可信的,国家工业和信息化部以资质合规的方式,陆续向天威诚信数字认证中心等30家相关机构颁发了从业资质。
由于Internet网电子商务系统技术使在网上购物的顾客能够极其方便轻松地获得商家和企业的信息,但同时也增加了对某些敏感或有价值的数据被滥用的风险.为了保证互联网上电子交易及支付的安全性,保密性等,防范交易及支付过程中的欺诈行为,必须在网上建立一种信任机制。
这就要求参加电子商务的买方和卖方都必须拥有合法的身份,并且在网上能够有效无误的被进行验证。
数字证书可用于:
发送安全电子邮件、访问安全站点、网上证券交易、网上招标采购、网上办公、网上保险、网上税务、网上签约和网上银行等安全电子事务处理和安全电子交易活动。
数字证书里存有很多数字和英文,当使用数字证书进行身份认证时,它将随机生成128位的身份码,每份数字证书都能生成相应但每次都不可能相同的数码,从而保证数据传输的保密性,即相当于生成一个复杂的密码。
数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,可以更加方便灵活地运用在电子商务和电子政务中。
我们来用Vc++实现证书库注册,请见代码实现与注释讲解
#include
#definemY_encoDIng_TYpe(pKcs_7_Asn_encoDIng|x509_Asn_encoDIng)voidhandleerror(char*s);
voidmain()
{
//--------------------------------------------------------------------
hceRTsToRehsystemstore;
//系统证书库句柄DwoRDdwFlags=ceRT_sYsTem_sToRe_cuRRenT_useR;
//系统证书库保存位置LpcwsTRpvsystemname=L"
mYsToRe"
;
//证书库名称ceRT_phYsIcAL_sToRe_InFophysicalstoreInfo;
//物理证书库结构bYTefResponse=n;
if(certRegistersystemstore({printf("
系统证书库%s已被注册.\n"
pvsystemname);
}else{printf("
系统证书库没有注册.\n"
);
}pvsystemname,//系统证书库名称dwFlags,//系统证书库保存位置nuLL,nuLL))//--------------------------------------------------------------------//初始化physicalstoreInfo.physicalstoreInfo.cbsize=sizeof(ceRT_phYsIcAL_sToRe_InFo);
physicalstoreInfo.pszopenstoreprovider=(char*)ceRT_sToRe_pRoV_FILenAme;
physicalstoreInfo.dwFlags=ceRT_phYsIcAL_sToRe_ADD_enAbLe_FLAg;
physicalstoreInfo.dwpriority=1;
physicalstoreInfo.dwopenencodingType=mY_encoDIng_TYpe;
physicalstoreInfo.openparameters.pbData=(bYTe*)L"
e:
\\mystore\\Teststor.sto"
physicalstoreInfo.openparameters.cbData=(wcslen((LpwsTR)
physicalstoreInfo.openparameters.pbData)+1)*sizeof(wchAR);
//--------------------------------------------------------------------//向系统证书库注册一个物理库if(certRegisterphysicalstore(
{}else{}dwFlags,//标志位,指示证书库存储位置。
L"
TesToR.sTo"
//物理证书库名称printf("
物理证书库没有被注册.\n"
//--------------------------------------------------------------------//反注册系统证书库printf("
想要反注册这个%s证书库吗?
(y/n)"
scanf("
%c"
if(fResponse==y){if(c(:
openssl获取证书信息)ertuegistersystemstore(pvsystemname,dwFlags)){printf("
系统证书库%s已经被反注册.\n"
此系统证书库未被反注册.\n"
}}
}//endmain
//handleerror:
错误处理函数,打印错误信息,并退出程序
voidhandleerror(char*s)
printf("
Anerroroccurredinrunningtheprogram.\n"
%s\n"
s);
errornumber%x\n."
getLasterror());
programterminating.\n"
exit
(1);
}
我们来用Vc++实现证书库操作,请见代码实现与注释讲解
voidmain(void)
hceRTsToRehcollectionstore;
//集合证书库句柄hceRTsToRehsystemstore;
//系统证书库句柄hceRTsToRehmemorystore;
//内存证书库句柄pcceRT_conTexTpDesiredcert=nuLL;
//证书句柄hAnDLehstoreFilehandle;
//输出文件句柄LpcsTRpszFilename="
Teststor.sto"
//输出文件名//--------------------------------------------------------------------//变量申明与初始化
LpwsTRpswzFirstcert=L"
TesT_sIgneR_nAme"
//第一个证书客体名称,必须确定在“my”证书库中有此证书
LpwsTRpswzsecondcert=L"
china-wuhan-ruanou"
//第二个证书客体名称,必须确定在“my”证书库中有此证书
//打开一个证书库集合if(hcollectionstore=certopenstore({printf("
打开一个证书库集合.\n"
}else{handleerror("
打开集合证书库出错."
}//-------------------------------------------------------------------//打开一个新内存证书库,它是一个临时证书库if(hmemorystore=certopenstore({printf("
打开一个内存证书库.\n"
打开内存证书库出错."
}//-------------------------------------------------------------------//打开系统证书库“my”ceRT_sToRe_pRoV_memoRY,//内存证书库0,//编码类型,这里不需要nuLL,//使用默认的csp0,//不需要标志位nuLL))//不需要此参数ceRT_sToRe_pRoV_coLLecTIon,//集合证书库0,//编码类型,这里不需要nuLL,//使用默认的csp0,//不需要标志位nuLL))//不需要此参数if(hsystemstore=certopenstore(ceRT_sToRe_pRoV_sYsTem,//系统证书库