利用openSSL实现SSl双向认证学习笔记
利用openssl命令进行加密和证书操作

利用openssl命令进行加密和证书操作一、利用 OpenSSL 命令进行加密和证书操作OpenSSL 是一个开放源代码的软件库,可提供用于传输层安全性(TLS) 和安全套接字层 (SSL) 协议的加密功能,以及用于生成数字证书的工具。
本文将介绍如何使用 OpenSSL 命令进行加密和证书操作。
二、加密文件1. 创建密钥对使用 OpenSSL 命令生成密钥对,其中包括一个私钥和一个公钥。
```bashopenssl genpkey -algorithm RSA -out private.key```这将生成一个名为 private.key 的私钥文件。
```bashopenssl rsa -pubout -in private.key -out public.key```这将从私钥文件中提取公钥,并将其保存为 public.key。
2. 加密文件使用公钥对文件进行加密。
```bashopenssl rsautl -encrypt -in plaintext.txt -inkey public.key -pubin -out ciphertext.enc```其中,plaintext.txt 是待加密的文件,ciphertext.enc 是加密后的文件。
3. 解密文件使用私钥对加密文件进行解密。
```bashopenssl rsautl -decrypt -in ciphertext.enc -inkey private.key -out decrypted.txt```其中,ciphertext.enc 是待解密的文件,decrypted.txt 是解密后的文件。
三、生成自签名证书1. 创建私钥使用 OpenSSL 命令生成私钥。
```bashopenssl genpkey -algorithm RSA -out private.key```2. 创建证书请求使用私钥生成证书请求。
```bashopenssl req -new -key private.key -out request.csr```在生成过程中,您需要提供一些证书请求的相关信息。
Linux系统利用OpenSSL生成SSL证书

Linux上使用OpenSSL生成SSL证书Linux上使用OpenSSL生成SSL证书1 安装OpenSSL2 生成私钥文件(KEY)3 生成证书请求文件(CSR)4 生成自签名证书(CRT)5 配置服务器1 安装OpenSSL在终端输入以下命令来检查是否已安装OpenSSL:openssl version如果已安装,则可以看到OpenSSL的版本号。
如果未安装,需要根据所使用的Linux发行版进行安装,例如:Debian/Ubuntu:sudo apt-get install opensslCentOS/RHEL:sudo yum install openssl2 生成私钥文件(KEY)1. 执行以下命令生成一个私钥文件(例如private.key):openssl genrsa -out private.key 2048以上示例将生成一个2048位的RSA私钥。
3 生成证书请求文件(CSR)1. 执行以下命令生成一个证书请求文件(例如server.csr):openssl req -new-key private.key -out server.csr2. 在生成CSR的过程中,需要提供一些证书信息,例如:常用名称、国家、email、组织名称等,详细信息如下:You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:cnState or Province Name (full name) []:bjLocality Name (eg, city) [Default City]:bjOrganization Name (eg, company) [Default Company Ltd]:bjOrganizational Unit Name (eg, section) []:bj4 生成自签名证书(CRT )1.以上示例将生成一个有效期为365天的自签名证书,将使用私钥文件来签名证书请求文件,可以根据需要调整证书的有效期5 配置服务器将生成的私钥文件和证书文件配置到Nginx 或Apache 等服务器上即可使用。
Linux命令高级技巧使用openssl生成和管理SSL证书

Linux命令高级技巧使用openssl生成和管理SSL证书使用OpenSSL生成和管理SSL证书一、介绍SSL证书是用于保护网站和网络通信安全的重要工具。
OpenSSL是一个开源加密库,能够提供各种加密算法和SSL/TLS协议的实现。
本文将介绍如何使用OpenSSL生成和管理SSL证书的高级技巧。
二、安装OpenSSL首先,确保已经在Linux系统上安装了OpenSSL。
可以通过以下命令来检查OpenSSL是否已安装:$ openssl version如果没有安装,可以使用包管理工具,如apt、yum等进行安装。
三、生成自签名证书自签名证书用于测试环境或本地开发,不需要经过权威机构的认证。
使用OpenSSL可以轻松生成自签名证书。
以下是生成自签名证书的步骤:1. 生成私钥:$ openssl genrsa -out private.key 20482. 生成证书签发请求(CSR):$ openssl req -new -key private.key -out csr.csr在生成CSR的过程中,需要填写一些证书相关的信息,如国家、地区、组织、通用名等。
3. 生成自签名证书:$ openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt生成的certificate.crt即为自签名证书,可以用于配置Web服务器等需要SSL证书的场景。
四、生成CA证书除了自签名证书,我们也可以生成CA(Certificate Authority)证书,以进行证书签发。
以下是生成CA证书的步骤:1. 生成私钥:$ openssl genrsa -out ca.key 20482. 生成证书签发请求(CSR):$ openssl req -new -key ca.key -out ca.csr在生成CSR的过程中,需要填写一些证书相关的信息,如国家、地区、组织、通用名等。
(3条消息)SSLTLS双向认证(一)

(3条消息)SSLTLS双向认证(一)本文部分参考:/hherima/article/details/52469674一: SSL/TLS介绍什么是SSL,什么是TLS呢?官话说SSL是安全套接层(secure sockets layer),TLS是SSL的继任者,叫传输层安全(transport layer security)。
说白点,就是在明文的上层和TCP层之间加上一层加密,这样就保证上层信息传输的安全。
如HTTP协议是明文传输,加上SSL 层之后,就有了雅称HTTPS。
它存在的唯一目的就是保证上层通讯安全的一套机制。
它的发展依次经历了下面几个时期,像手机软件升级一样,每次更新都添加或去除功能,比如引进新的加密算法,修改握手方式等。
SSL1.0: 已废除SSL2.0: RFC6176,已废除SSL3.0: RFC6101,基本废除TLS1.0: RFC2246,目前大都采用此种方式TLS1.1: RFC4346TLS1.2: RFC5246,没有广泛使用TLS1.3: IETF正在酝酿中下面我们将介绍TLS1.x 如何保证通讯安全。
二: CA & SSL Server & SSL Client 介绍如何保证安全呢?你说安全就安全吗,究竟是怎么实现的呢?绝对安全吗?哈,有人的地方就有江湖,有江湖的地方就没有绝对的安全。
但SSL/TLS确实可以极大程度保证信息安全。
下面根据图一SSL/TLS 工作流来一览实现过程。
2.1 SSL/TLS 工作流图一 SSL/TLS 工作流CA: 证书授权中心( certificate authority)。
它呢,类似于国家出入境管理处一样,给别人颁发护照;也类似于国家工商管理局一样,给公司企业颁发营业执照。
它有两大主要性质:1) CA本身是受信任的 // 国际认可的2) 给他受信任的申请对象颁发证书 // 和办理护照一样,要确定你的合法身份,你不能是犯罪分子或造反派。
HTTPS双向认证详细解说

HTTPS双向认证详细解说双向认证这⾥总结为详细的步骤①浏览器发送⼀个连接请求给安全服务器。
②服务器将⾃⼰的证书,以及同证书相关的信息发送给客户浏览器。
③客户浏览器检查服务器送过来的证书是否是由⾃⼰信赖的 CA 中⼼所签发的。
如果是,就继续执⾏协议;如果不是,客户浏览器就给客户⼀个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
④接着客户浏览器⽐较证书⾥的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否⼀致,如果是⼀致的,客户浏览器认可这个服务器的合法⾝份。
⑤服务器要求客户发送客户⾃⼰的证书。
收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得⽤户的公钥。
⑥客户浏览器告诉服务器⾃⼰所能够⽀持的通讯对称密码⽅案。
⑦服务器从客户发送过来的密码⽅案中,选择⼀种加密程度最⾼的密码⽅案,⽤客户的公钥加过密后通知浏览器。
⑧浏览器针对这个密码⽅案,选择⼀个通话密钥,接着⽤服务器的公钥加过密后发送给服务器。
⑨服务器接收到浏览器送过来的消息,⽤⾃⼰的私钥解密,获得通话密钥。
⑩服务器、浏览器接下来的通讯都是⽤对称密码⽅案,对称密钥是加过密的。
单向认证 SSL 协议的具体过程①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产⽣的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送⾃⼰的证书。
③客户利⽤服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发⾏服务器证书的 CA 是否可靠,发⾏者证书的公钥能否正确解开服务器证书的“发⾏者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。
如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进⾏第四步。
④⽤户端随机产⽣⼀个⽤于后⾯通讯的“对称密码”,然后⽤服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
SSL双向认证(高清版)

SSL双向认证(⾼清版)介绍了SSL双向认证的⼀些基本问题,以及使⽤Nginx+PHP基于它搭建https的Webservice。
之前的⽅式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这⾥我再整理记录下。
由于nginx的ssl_client_certificate参数只能指定⼀个客户端公钥,如果增加⼀个客户端进⾏通信就要重新配⼀个server。
n:1的模式是通过CA的级联证书模式实现的,⾸先⾃⼰⽣成⼀套CA根级证书,再借助其⽣成⼆级证书作为client证书。
此时client私钥签名不仅可以通过对应的client公钥验证,还可通过根证书的公钥进⾏验证。
看到这⾥应该豁然开朗了吧,下⾯简单介绍下具体怎么操作:1 准备⼯作1.1 openssl⽬录准备⼀般情况下openssl的配置⽂件都在这个⽬录/etc/pki/tls,so:mkdir /etc/pki/ca_linvocd /etc/pki/ca_linvomkdir root server client newcertsecho 01 > serialecho 01 > crlnumbertouch index.txt1.2 openssl配置准备修改openssl配置vi /etc/pki/tls/f找到这句注释掉,替换为下⾯那句#default_ca = CA_defaultdefault_ca = CA_linvo把整个部分拷贝⼀份,改成上⾯的名字[ CA_linvo ]修改⾥⾯的如下参数:dir = /etc/pki/ca_linvocertificate = $dir/root/ca.crtprivate_key = $dir/root/ca.key保存退出2 创建CA根级证书⽣成key:openssl genrsa -out /etc/pki/ca_linvo/root/ca.key⽣成csr:openssl req -new -key /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/root/ca.csr⽣成crt:openssl x509 -req -days 3650 -in /etc/pki/ca_linvo/root/ca.csr -signkey /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/root/ca.crt ⽣成crl:openssl ca -gencrl -out /etc/pki/ca_linvo/root/ca.crl -crldays 7⽣成的根级证书⽂件都在/etc/pki/ca_linvo/root/⽬录下注意:创建证书时,建议证书密码设置长度>=6位,因为java的keytool⼯具貌似对它有要求。
使用Java进行双向认证的SSL链接及使用OpenSSL生产证书链附源程序(转)

这几天被SSL和证书搞得头昏脑胀的。
不过还好终于把这个SSL搞定了。
用SSL进行双向身份验证意思就是在客户机连接服务器时,链接双方都要对彼此的数字证书进行验证,保证这是经过授权的才能够连接(我们链接一般的SSL时采用的是单向验证,客户机只验证服务器的证书,服务器不验证客户机的证书。
而连接网上银行时使用的U盾就是用来存储进行双向验证所需要的客户端证书的)。
JDK里面内置了一个数字证书生产工具:keytool。
但是这个工具只能生成自签名的数字证书。
所谓自签名就是指证书只能保证自己是完整的,没有经过非法修改的。
但是无法保证这个证书是属于谁的。
其实用这种自签名的证书也是可以进行双向验证的(用keytool生成的自签名证书进行双向验证请看这里,向这位仁兄致意~:/stone2083/archive/2007/12/20/169015.html),但是这种验证有一个缺点:对于每一个要链接的服务器,都要保存一个证书的验证副本。
而且一旦服务器更换证书,所有客户端就需要重新部署这些副本。
对于比较大型的应用来说,这一点是不可接受的。
所以就需要证书链进行双向认证。
证书链是指对证书的签名又一个预先部署的,众所周知的签名方签名完成,这样每次需要验证证书时只要用这个公用的签名方的公钥进行验证就可以了。
比如我们使用的浏览器就保存了几个常用的CA_ROOT。
每次连接到网站时只要这个网站的证书是经过这些CA_ROOT签名过的。
就可以通过验证了。
但是这些共用的CA_ROOT的服务不是免费的。
而且价格不菲。
所以我们有必要自己生成一个CA_ROOT的密钥对,然后部署应用时,只要把这个CA_ROOT的私钥部署在所有节点就可以完成验证了。
要进行CA_ROOT的生成,需要OpenSSL(/)。
你也可以在/products/Win32OpenSSL.html找到Windows下的版本安装好OpenSSL以后就可以生成证书链了,我写了一个BAT解决这些东西:@echo offset Cset PWD_SERVER_KS=serverksset PWD_SERVER_KEY=serverkeyset PWD_CLIENT_KS=clientksset PWD_CLIENT_KEY=clientkeyif not exist ca.key (echo Generating a ca root key file...openssl req -new -x509 -keyout ca.key -out ca.crt -config %CONFIG%) else (echo ca.key already exists...)if not exist server.keystore (echo Generating server's private key...keytool -genkey -alias logon_server_private_key -validity 365 -keyalg RSA -keysize 1024-keystore server.keystore -keypass %PWD_SERVER_KEY% -storepass %PWD_SERVER_KS% ) else (echo server.keystore already exits...)if not exist client.keystore (echo Generating client's private key...keytool -genkey -alias ipclient_private_key -validity 365 -keyalg RSA -keysize 1024-keystore client.keystore -keypass %PWD_CLIENT_KEY% -storepass %PWD_CLIENT_KS% ) else (echo client.keystore already exits...)echo ========Finished key generation=========if not exist logon_server_private_key.csr (echo Generating server's singature request file...keytool -certreq -alias logon_server_private_key -sigalg MD5withRSA -filelogon_server_private_key.csr -keypass %PWD_SERVER_KEY%-storepass %PWD_SERVER_KS% -keystore server.keystore) else (echo logon_server_private_key.csr already exits...)if not exist ipclient_private_key.csr (echo Generating client's singature request file...keytool -certreq -alias ipclient_private_key -sigalg MD5withRSA -fileipclient_private_key.csr -keypass %PWD_CLIENT_KEY%-storepass %PWD_CLIENT_KS% -keystore client.keystore) else (echo ipclient_private_key.csr already exits...)if not exist logon_server_private_key.crt (openssl ca -in logon_server_private_key.csr -out logon_server_private_key.crt -cert ca.crt-keyfile ca.key -notext -config %CONFIG%) else (echo logon_server_private_key.crt already exits...)if not exist ipclient_private_key.crt (openssl ca -in ipclient_private_key.csr -out ipclient_private_key.crt -cert ca.crt -keyfile ca.key -notext -config %CONFIG%) else (echo ipclient_private_key.crt already exits...)echo =========Finished ca root signaturing==========echo Importing ca root certs into keystore...keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass %PWD_SERVER_KS%-keystore server.keystorekeytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass %PWD_CLIENT_KS%-keystore client.keystoreecho Importing signatured keys...keytool -import -v -alias logon_server_private_key -file logon_server_private_key.crt-keypass %PWD_SERVER_KEY% -storepass %PWD_SERVER_KS% -keystore server.keystorekeytool -import -v -alias ipclient_private_key -fileipclient_private_key.crt -keypass %PWD_CLIENT_KEY% -storepass %PWD_CLIENT_KS% -keystore client.keystoreecho All done!运行这个批处理,期间需要回答一些问题,然后就可以得到一些文件其中client.keystore 是需要在客户端部署的,server.keystore是在服务器部署的。
证书双向验证例子

证书双向验证是一种网络安全技术,它通过验证证书持有者的身份,确保网络通信的安全性。
下面是一个证书双向验证的例子,帮助您更好地理解这一概念。
假设我们有一个在线购物平台,需要使用SSL证书来保护用户在平台上的交易数据。
在这个例子中,我们使用的是一个由受信任的证书颁发机构(CA)签发的SSL证书。
1. 客户端验证:当用户访问在线购物平台时,他们的浏览器会发出一个HTTPS请求到服务器的SSL证书。
客户端会验证服务器提供的证书是否来自受信任的CA,以及证书是否在有效期内。
如果证书无效或不受信任,浏览器会显示安全警告,例如红叉图标或弹出窗口显示“不安全”。
2. 服务器端验证:一旦客户端确认了SSL证书的有效性,服务器会开始验证客户端的认证信息。
这包括客户端的IP地址、操作系统、浏览器类型等。
服务器会将这些信息与证书中的信息进行比对,以确保与预期的客户端类型匹配。
如果客户端的认证信息不匹配或无效,服务器会拒绝提供服务,并显示安全警告。
3. 双向验证:通过客户端和服务器之间的相互验证,证书双向验证实现了网络通信的安全性。
这有助于防止中间人攻击,因为攻击者无法伪造合法的SSL证书。
此外,证书双向验证还可以提供信任链,确保所有的通信都来自可信赖的源头。
这个例子说明了证书双向验证在保护网络安全中的重要性。
它确保了通信双方的身份可信,减少了网络攻击的风险,并提高了用户对在线交易的信任度。
在实际应用中,许多大型网站和应用程序都采用了证书双向验证来保护用户数据和交易安全。
需要注意的是,证书双向验证需要正确的配置和设置,以确保客户端和服务器之间的验证过程正确无误。
此外,定期更新和备份SSL证书也是保证网络安全的重要措施。
总之,证书双向验证是一种强大的网络安全技术,它通过验证通信双方的身份,确保了网络通信的安全性。
通过正确配置和设置,证书双向验证可以帮助保护用户数据和交易安全,提高用户对在线交易的信任度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SSl双向认证学习笔记2010-09-02 13:16:39| 分类:ssl | 标签:|字号大中小订阅url]/sunyujia/archive/2008/10/03/3014667.aspx[/url][url]/nataka/archive/2005/09/03/470539.aspx[/url][url]/thread-743287-1-1.html[/url]第一节基础知识最近要做一个SSL的应用,先后了解了两个命令,一个是keytool,一个是openssl。
keytool是JDK得集成环境。
只要安装了JDK,基本上都会有(^_^,除非你安装太老的!),我用的1.5。
在安装openssl的时候,花了半天时间。
用SSL进行双向身份验证意思就是在客户机连接服务器时,链接双方都要对彼此的数字证书进行验证,保证这是经过授权的才能够连接(我们链接一般的SSL时采用的是单向验证,客户机只验证服务器的证书,服务器不验证客户机的证书。
而连接网上银行时使用的U盾就是用来存储进行双向验证所需要的客户端证书的)。
JDK工具KEYTOOL-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书-alias 产生别名-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中-keyalg 指定密钥的算法-validity 指定创建的证书有效期多少天-keysize 指定密钥长度-storepass 指定密钥库的密码-keypass 指定别名条目的密码-dname 指定证书拥有者信息例如:"CN=firstName,OU=org,O=bj,L=bj,ST=gd,C=cn"-list 显示密钥库中的证书信息keytool -list -v -keystore 别名-storepass ....-v 显示密钥库中的证书详细信息-export 将别名指定的证书导出到文件keytool -export -alias 别名-file 文件名.crt-file 参数指定导出到文件的文件名-delete 删除密钥库中某条目keytool -delete -alias 别名-keystore sage-keypasswd 修改密钥库中指定条目口令keytool -keypasswd -alias 别名-keypass .... -new ....-storepass ... -keystore 别名-import 将已签名数字证书导入密钥库keytool -import -alias 别名-keystore 证书名-file 文件名(可以加.crt 后缀)命令:生成证书keytool -genkey -keystore 文件名(可包含路径) -keyalg rsa -alias 别名-validity 有效期查看证书keytool -list -v -keystore 路径把证书导出到文件keytool -export -alias 别名-keystore 证书名-rfc -file 文件名(可包含路径)修改密码keytool -keypasswd -alias 别名-keypass 旧密码-new 新密码导出证书到新的TrustStorekeytool -import -alias 别名-file 文件名-keystore truststore此处省略3000字,待补^_^第二节安装一、下载:Openssl版本0.9.8i 地址:[url]/source/openssl-0.9.8i.tar.gz[/url]ActivePerl版本5.8.8.822 [url]/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.msi[/url]二、安装:编译器VC6机器上一直有,不是这次特意安装的。
貌似只要是c++编译器就差不多。
1.安装VC和ActivePerl,先后顺序无所谓,安装时注意勾选添加环境变量的选项。
2.检查VC6的环境变量,path需要包含C:\Program Files\Microsoft Visual Studio\VC98\bin,没有的话手动添加。
测试是否有vc环境最简单的测试方法是在执行install.bat前先在cmd下执行下cl,没有vc环境的话会报:“'cl' 不是内部或外部命令,也不是可运行的程序”。
另外,还有一种办法:可以手工调用vc目录下设置环境变量的批处理vcvars32.bat,在VC的安装目录下可以搜索到这个文件。
因为不同版本的vc这个文件所在位置不同所以我就不说明它的位置了。
3.解压Openssl,解压后会发现openssl-0.9.8i目录下面有很多文件,更改文件夹名称为openssl,并剪切到c:\openssl其中的一个文件是INSTALL.W32用记事本或者其他文本编辑器打开,这个文件是介绍Win32平台的安装方法,我下面的批处理也是根据这个文件写的,大家最好依据这文件的描述安装,英文不好的,可以对照我的批处理来看,如果大家安装的版本和我相同,那么直接使用下面的批处理安装即可。
在INSTALL.W32相同目录下新建一个批处理install.bat,内容如下@rem --prefix 指定安装目录perl Configure VC-WIN32 --prefix=C:/opensslpausecall ms\do_mspausenmake -f ms\ntdll.makpausenmake -f ms\ntdll.mak testpausenmake -f ms\ntdll.mak installpause进入到c:\openssl目录,执行批处理install.bat就可以了。
三、注意事项:1.安装时间比较长,请耐心等待2.每个步骤间使用了pause暂停,便于观察。
每步完成后按任意键继续,注意有没有报错。
3.可以手工调用vc目录下设置环境变量的批处理vcvars32.bat,在VC的安装目录下可以搜索到这个文件。
因为不同版本的vc这个文件所在位置不同所以我就不说明它的位置了。
测试是否有vc环境最简单的测试方法是在执行install.bat前先在cmd下执行下cl,没有vc环境的话会报'cl' 不是内部或外部命令,也不是可运行的程序4.提示%OSVERSION% is not defined 这个错误的时候可以忽略它没关系5.网上搜索到安装前修改OpenSSL目录下的MS目录下的ntdll.mak文件,将CFLAG的/WX选项去掉,否则cl编译器会报.\crypto\des\enc_read.c文件的read是The POSIX name for this item is deprecated 建议使用_read。
因为我使用非常简单的功能所以我没有修改它,需要的朋友可以尝试修改它。
6.最终编译结束会在指定安装目录下产生子目录和文件夹:Makefile.bakMINFOinc32out32dlltmp32dllbinf7.环境变量path中加入“C:\openssl\bin”,编辑"C:\openssl\f"文件,修改CA_default节中的policy = policy_match为policy = policy_anything并把它拷贝到C:\openssl\ssl。
运行cmd,在任意目录下运行openssl,不出错误提示为准。
四、VC编程可参考:最后的输出都在out32dll目录下:包括可执行文件、两个dll和两个lib文件: libeay32.dll, libeay32.lib,ssleay32.dll, ssleay32.lib编程初步:1、打开VC-Tools-Options-Directores,在Include files中增加【openssl-0.9.8】\inc32目录;在Libray files中增加【openssl-0.9.8】\out32dll2、源程序中包含以下三个头文件并加入LIB:#include <openssl/ssl.h>#include <openssl/err.h>#include <openssl/bio.h>#pragma comment(lib, "libeay32.lib")#pragma comment(lib, "ssleay32.lib")3、参考源码开始编程:[url]/Download/intro-openssl.zip[/url]第三节使用OpenSSL生产证书链一、准备知识,仅作为练习:1、首先为CA创建一个RSA 私用密钥:OpenSSL genrsa -des3 -out ca.key 1024该指令中genras表示生成RSA私有密钥文件。
-des3表示用DES3加密该文件。
-out ca.key表示生成文件ca.key。
1024是我们的RSA key的长度。
生成server.key的时候会要你输入一个密码,这个密钥用来保护你的ca.key文件,这样即使人家偷走你的ca.key 文件,也打不开,拿不到你的私有密钥。
运行该指令后系统提示输入PEM pass phrase,也就是ca.key文件的加密密码,这里设为123456782、可用下列命令查看:# OpenSSL rsa -noout -text -in ca.key该指令中rsa表示对RSA私有密钥的处理。
-noout表示不打印出key的编码版本信息。
-text表示打印出私有密钥的各个组成部分。
-in ca.key 表示对ca.key文件的处理对RSA算法进行可以知道,RSA的私有密钥其实就是三个数字,其中两个是质数prime numbers。
产生RSA 私有密钥的关键就是产生这两个质数。
还有一些其他的参数,引导着整个私有密钥产生的过程。
二、建立批处理:任意建立一个文件夹,比如D:\test;用记事本建立一个批处理,内容:@echo off:OpenSSL配置文件路径(如果出现“The organizationName field needed to be the same in the”之类的错误,请编辑此文件,修改CA_default节中的policy = policy_match为policy = policy_anythingset CONFIG="C:\openssl\ssl\f":服务器证书库密码set PWD_SERVER_KS=serverks:服务器证书密码set PWD_SERVER_KEY=serverkey:客户端证书库密码set PWD_CLIENT_KS=clientks:客户端证书密码set PWD_CLIENT_KEY=clientkey:有效期(天)set VALIDITY=365:服务器证书名set SERVER_CERT_NAME=logon_server_private_key:客户端证书名set CLIENT_CERT_NAME=ipclient_private_key:服务器证书库文件名set SERVER_KEYSTORE_NAME=server.keystore:客户端证书库文件名set CLIENT_KEYSTORE_NAME=client.keystoreif not exist DemoCA (mkdir DemoCAmkdir DemoCA\certsmkdir DemoCA\newcertsecho CAFEBABE>DemoCA\serialcopy nul DemoCA\index.txt)if not exist ca.key (echo Generating a ca root key file...openssl req -new -x509 -keyout ca.key -out ca.crt -config %CONFIG%) else (echo ca.key already exists...)if not exist server.keystore (echo Generating server's private key...keytool -genkey -alias %SERVER_CERT_NAME% -validity %VALIDITY% -keyalg RSA -keysize 1024 -keystore %SERVER_KEYSTORE_NAME% -keypass %PWD_SERVER_KEY% -storepass %PWD_SERVER_KS%) else (echo server.keystore already exits...)if not exist client.keystore (echo Generating client's private key...keytool -genkey -alias %CLIENT_CERT_NAME% -validity %VALIDITY% -keyalg RSA -keysize 1024 -keystore %CLIENT_KEYSTORE_NAME% -keypass %PWD_CLIENT_KEY% -storepass %PWD_CLIENT_KS%) else (echo client.keystore already exits...)echo ========Finished key generation=========if not exist %SERVER_CERT_NAME%.csr (echo Generating server's singature request file...keytool -certreq -alias %SERVER_CERT_NAME% -sigalg MD5withRSA -file %SERVER_CERT_NAME%.csr -keypass %PWD_SERVER_KEY% -storepass %PWD_SERVER_KS% -keystore %SERVER_KEYSTORE_NAME%) else (echo %SERVER_CERT_NAME%.csr already exits...)if not exist %CLIENT_CERT_NAME%.csr (echo Generating client's singature request file...keytool -certreq -alias %CLIENT_CERT_NAME% -sigalg MD5withRSA -file %CLIENT_CERT_NAME%.csr -keypass %PWD_CLIENT_KEY% -storepass %PWD_CLIENT_KS% -keystore %CLIENT_KEYSTORE_NAME%) else (echo %CLIENT_CERT_NAME%.csr already exits...)if not exist %SERVER_CERT_NAME%.crt (openssl ca -in %SERVER_CERT_NAME%.csr -out %SERVER_CERT_NAME%.crt -cert ca.crt -keyfile ca.key -notext -config %CONFIG%) else (echo %SERVER_CERT_NAME%.crt already exits...)if not exist %CLIENT_CERT_NAME%.crt (openssl ca -in %CLIENT_CERT_NAME%.csr -out %CLIENT_CERT_NAME%.crt -cert ca.crt -keyfile ca.key -notext -config %CONFIG%) else (echo %CLIENT_CERT_NAME%.crt already exits...)echo =========Finished ca root signaturing==========echo Importing ca root certs into keystore...keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass %PWD_SERVER_KS% -keystore %SERVER_KEYSTORE_NAME%keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass %PWD_CLIENT_KS% -keystore %CLIENT_KEYSTORE_NAME%echo Importing signatured keys...keytool -import -v -alias %SERVER_CERT_NAME% -file %SERVER_CERT_NAME%.crt -keypass %PWD_SERVER_KEY% -storepass %PWD_SERVER_KS% -keystore %SERVER_KEYSTORE_NAME%keytool -import -v -alias %CLIENT_CERT_NAME% -file %CLIENT_CERT_NAME%.crt -keypass %PWD_CLIENT_KEY% -storepass %PWD_CLIENT_KS% -keystore %CLIENT_KEYSTORE_NAME%echo All done!三、运行批处理:1、Name:名,填写CN2、State or Province Name:省州名,填写ShanDong3、Locality Name:城市名,填写YT4、Organization Name:组织名,xcg5、Organization Unit Name:单位名,xcg6、Common Name:xcg7、Email Address:。