admin管理员组

文章数量:1531925

一:WIN7_64位下openssl安装步骤
1、安装ActivePer-5.22.3.2240-MSWin32-x64-401627.exe
安装成功后,打开命令行,执行:perl–v
如下图所示即安装成功:
 
2、安装Microsoft Visual Studio2013
略……
3、安装openssl-1.0.1g.tar.gz
(1)、打开VS2013命令行工具
(2)、编译过程可查看openssl-1.0.1g.tar.gz解压后文件夹中INSTALL.W64文件
(3)、按顺序执行相应命令即可
如INSTALL.W64内win764命令如下
To build for Win64/x64:
>perl Configure VC-WIN64A
>ms\do_win64a
>nmake -f ms\ntdll.mak
>cd out32dll
> ..\ms\test
详细过程可参考:http://wwwblogs/yangyquin/p/5284530.html


二:X509证书标准
X.509这是一种证书标准,主要定义了证书中应该包含哪些内容。其详情可以参考RFC5280,SSL使用的就是这种证书标准。
1、编码格与应用环境

同样的X.509证书,可能有不同的编码格式,目前有两种编码格式,即PEM与DER两种编码格式。

编码格式

应用环境

PEM

ApacheNginx服务器偏向于使用这种编码格式.

DER

JavaWindows服务器偏向于使用这种编码格式.

1.1、PEM - Privacy Enhanced Mail
打开看文本格式,以"-----BEGIN..."开头, "-----END..."结尾,内容是base64编码。
查看PEM格式证书信息的命令行:
openssl x509 -in certificate.pem -text -noout
Apache和Nginx服务器偏向于使用这种编码格式.
1.2、DER - Distinguished Encoding Rules
打开看是二进制格式(ASCII编码),不可读.
查看DER格式证书信息的信息命令行:
openssl x509 -in certificate.der -inform der -text –noout
openssl x509 -in certificate.cer -inform der -text -noout

Java和Windows服务器偏向于使用这种编码格式.


三:证书文件扩展名及应用环境
这是比较误导人的地方,虽然我们已经知道有PEM和DER这两种编码格式,但文件扩展名并不一定就叫"PEM"或者"DER",常见的扩展名除了PEM和DER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式.

证书扩展名

编码格式

备注

CRT

PEMDER编码,大多数是PEM编码

常见于Nginx系统

CER

PEMDER编码,大多数是DER编码

常见于windows系统

KEY

PEMDER编码

通常用来存放一个公钥或者私钥,并非X.509证书,

CSR

/

这个并不是证书,而是向权威证书颁发机构获得签名证书的申请

PFX/P12

DER编码

windows

CRT

/

权威证书颁发机构的根证书

JKS

/

java



1、CRT

CRT应该是certificate的三个字母,其实还是证书的意思,常见于Nginx系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码.


2、CER

是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.


3、KEY
通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER。
查看KEY的办法:
opensslrsa -in mykey.key -text -noout
如果是DER格式的话,同理应该这样了:

opensslrsa -in mykey.key -text -noout -inform der


4、CSR
Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好.做过iOS APP的朋友都应该知道是怎么向苹果申请开发者证书的吧.

查看的办法:
opensslreq -noout -text -in my.csr

(如果是DER格式的话照旧加上-inform der)


5、PFX/P12
predecessor of PKCS#12,对Nginx服务器来说,一般CRT和KEY是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中,(因此这个文件包含了证书及私钥)这样会不会不安全?应该不会,PFX通常会有一个"提取密码",你想把里面的东西读取出来的话,它就要求你提供提取密码,PFX使用的是DER编码即ASCII编码

如何把PFX转换为PEM编码?
openssl pkcs12 -in for-iis.pfx -out for-iis.pem –nodes

只提取证书
openssl pkcs12 -nokeys -in cacert.p12 -out ca2cert.pem

只提取秘钥对
openssl pkcs12 -nocerts -in cacert.p12 -out ca2cert.pem

生成pfx/p12的命令类似这样:

openssl pkcs12 -export -out certificate.pfx/p12 -inkeyprivateKey.key -in certificate.crt -certfile


6、crt

其中CACert.crt是CA(权威证书颁发机构)的根证书,有的话也通过-certfile参数一起带进去.这么看来,PFX其实是个证书密钥库,这样通过钥匙串就能看到链结构。


7、JKS

即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫"keytool"的工具,可以将PFX转为JKS,当然了,keytool也能直接生成JKS,不过在此就不多表了.


四:证书编码的转换
1、PEM转为DER

openssl x509 -in cert.crt -outform der -out cert.der


2、DER转为PEM
openssl x509 -in cert.crt -inform der -outformpem -out cert.pem

(提示:要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req...)


五:创建cer&pfx证书文件
1、CMD命令行如下
::/*c:/openssl/out32dll为openssl的安装路径,openssl版本为openssl1.0.1g*/

cd /d c:/openssl/out32dll

如果有 WARNING: can't open config file: /usr/local/ssl/opensslf 先执行 set OPENSSL_CONF=opensslf

::/*创建根证书*/
opensslgenrsa -out ca/root.key -passout pass:ucs203 1024
::/*生成CA自签证书*/
openssl req -new -x509 -key ca/root.key -out ca/root.crt -days 3650 -subj /CN=ucsmy -passin pass:ucs203 -passout pass:ucs203
::/*得到pfx格式的私钥*/
openssl pkcs12 -export -out ca/root.pfx -inkey ca/root.key -in ca/root.crt -passin pass:ucs203 -passout pass:ucs203
::/*从pfx文件中分离出cer格式的公钥*/
openssl x509 -inform pem -in ca/root.crt -outform der -out ca/root.cer
echo 证书创建成功!
Pause

备注:“c:/openssl/out32dll“为openssl安装后路径,实际执行进修改这路径与相应的密码即可


六:证书文件类型转换
1、证书格式

各类证书由于存储的内容不同、采用编码不同、标准不同,所以尽管X.509标准规定了证书内容规范,但证书文件还是五花八门。不过openssl对这些不同的标准都有着不错的支持,可以用来进行不同格式证书的转换。
2、不同证书格式转换参考命令
附参考命令如下:
○1、PEM<==>DER/CER(BASE64--DER编码的转换)
openssl x509 -outform der -in certificate.pem -out certificate.der
○2、PEM<==>P7B
openssl crl2pkcs7 -nocrl -certfileca/root.cer -out ca/test/root.p7b
○3、PEM<==>PFX(PEM--PKCS#12)
openssl pkcs12 -export -out certificate.pfx -inkeyprivateKey.key -in certificate.crt
○4、PEM--p12(PEM--PKCS#12)
openssl pkcs12 -export -out Cert.p12 -in Cert.pem -inkeykey.pem
○5、CER/DER--PEM(编码DER--BASE64)
openssl x509 -inform der -in certificate.cer -out certificate.pem
○6、P7B--PEM(PKCS#7--PEM)
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
○7、P7B--PFX(PKCS#7--PKCS#12)
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkeyprivateKey.key -out certificate.pfx -certfile CACert.cer
○8、PFX/p12--PEM(PKCS#12--PEM)
openssl pkcs12 -in certificate.pfx -out certificate.cer
如无需加密pem中私钥,可以添加选项-nodes;
如无需导出私钥,可以添加选项-nokeys; 
○9、PEM BASE64--X.509文本格式
openssl x509 -in Key.pem -text -out Cert.pem
○10、PFX文件中提取私钥(.key)
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
○12、PEM--SPC
openssl crl2pkcs7 -nocrl -certfilevenus.pem -outform DER -out venus.spc
○13、PEM--PVK(openssl 1.x开始支持)
opensslrsa -in mycert.pem -outform PVK -pvk-strong -out mypvk.pvk
○14、PEM--PVK(对于openssl 1.x之前的版本,可以下载pvk转换器后通过以下命令完成)

pvk -in ca.key -out ca.pvk -nocrypt–topvk


七:JAVA与C#环境密钥处理
1、从C# pfx证书中提取java应用的密钥对,批处理命令行如下

::c:/openssl/out32dll为openssl的安装路径,openssl版本为openssl1.0.1g
cd /d c:/openssl/out32dll
::提取密钥对,ca相对路径
openssl pkcs12 -in ca/ucsmycert.pfx -nocerts -nodes -out ca/1.key -passin pass:ucs2013
::从密钥对提取私钥,ca相对路径
opensslrsa -in ca/1.key -out ca/1_pri.key
::从密钥对提取公钥,ca相对路径
opensslrsa -in ca/1.key -pubout -out ca/1_pub.key
::因为RSA算法使用的是pkcs8模式补足,需要对提取的私钥进一步处理,ca相对路径
openssl pkcs8 -in ca/1_pri.key -out ca/1_pri.p8 -outform der -nocrypt -topk8
echo 密钥提取成功!

Pause


2、用.key文件生成cer&pfx证书(C#应用证书)文件的批处理命令
     ::c:/openssl/out32dll为openssl的安装路径,openssl版本为openssl1.0.1g
cd /d c:/openssl/out32dll

::生成CA自签证书
opensslreq -new -x509 -key ca/root.key -out ca/root.crt -days 3650 -subj /CN=ucsmy -passin pass:ucs203 -passout pass:ucs203

::得到pfx格式的私钥
openssl pkcs12 -export -out ca/root.pfx -inkey ca/root.key -in ca/root.crt -passin pass:ucs203 -passout pass:ucs203

::从pfx文件中分离出cer格式的公钥
openssl x509 -inform pem -in ca/root.crt -outform der -out ca/root.cer

echo 证书创建成功!

pause


八:安装与测试环境
1、测试环境

○1、Windows7旗舰版
○2、系统类型:64位操作系统
○3、内存8G
○4、处理器Intel(R)Xeon(R)CPU E-3-1230 v5@3.40GHz 3.40 GHz
2、参考文献
参考书籍:

参考博客:


本文标签: 简单OpenSSL