利用openSSL实现SSl双向认证学习笔记

合集下载

利用openssl命令进行加密和证书操作

利用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证书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证书

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双向认证(一)

(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双向认证详细解说

HTTPS双向认证详细解说双向认证这⾥总结为详细的步骤①浏览器发送⼀个连接请求给安全服务器。

②服务器将⾃⼰的证书,以及同证书相关的信息发送给客户浏览器。

③客户浏览器检查服务器送过来的证书是否是由⾃⼰信赖的 CA 中⼼所签发的。

如果是,就继续执⾏协议;如果不是,客户浏览器就给客户⼀个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。

④接着客户浏览器⽐较证书⾥的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否⼀致,如果是⼀致的,客户浏览器认可这个服务器的合法⾝份。

⑤服务器要求客户发送客户⾃⼰的证书。

收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得⽤户的公钥。

⑥客户浏览器告诉服务器⾃⼰所能够⽀持的通讯对称密码⽅案。

⑦服务器从客户发送过来的密码⽅案中,选择⼀种加密程度最⾼的密码⽅案,⽤客户的公钥加过密后通知浏览器。

⑧浏览器针对这个密码⽅案,选择⼀个通话密钥,接着⽤服务器的公钥加过密后发送给服务器。

⑨服务器接收到浏览器送过来的消息,⽤⾃⼰的私钥解密,获得通话密钥。

⑩服务器、浏览器接下来的通讯都是⽤对称密码⽅案,对称密钥是加过密的。

单向认证 SSL 协议的具体过程①客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产⽣的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。

②服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送⾃⼰的证书。

③客户利⽤服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发⾏服务器证书的 CA 是否可靠,发⾏者证书的公钥能否正确解开服务器证书的“发⾏者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。

如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进⾏第四步。

④⽤户端随机产⽣⼀个⽤于后⾯通讯的“对称密码”,然后⽤服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。

SSL双向认证(高清版)

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生产证书链附源程序(转)

使用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证书也是保证网络安全的重要措施。

总之,证书双向验证是一种强大的网络安全技术,它通过验证通信双方的身份,确保了网络通信的安全性。

通过正确配置和设置,证书双向验证可以帮助保护用户数据和交易安全,提高用户对在线交易的信任度。

java+tomcat+openssl,https单向认证、双向认证(亲测)

java+tomcat+openssl,https单向认证、双向认证(亲测)

java+tomcat+openssl,https单向认证、双向认证(亲测)展开全文1.生成根证书、服务端证书、客户端证书1.1 生成CA根证书1.生成跟证书私钥root_private.key2.openssl genrsa -out root_private.key 10243.(私钥中包含附加信息,可推到出公钥。

使用私钥生成的证书包含对应公钥)4.生成根证书签发请求文件root.csr5.openssl req -new -key root_private.key -out root.csr -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=Testcompany/OU=Test company/CN=Test company"6.生成X.509格式的CA根证书root.crt7.openssl x509 -req -days 365 -in root.csr -out root.crt -signkey root_private.key8.根据root.crt证书生成truststore JKS文件root.truststore,输入秘钥库密码123456。

9.这一步只针对双向认证,单向不需要。

10.keytool -keystore root.truststore -import -trustcacerts -file root.crt11.输入yes,信任此证书。

1.2 使用根证书签发服务端证书(正常是先签发二级证书,由二级证书对服务端签发)1.生成服务端私钥文件server_private.key2.openssl genrsa -out server_private.key 10243.签名请求文件server.csr4.openssl req -new -key server_private.key -out server.csr -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=test-server/OU=test-server/CN=test-server"5.使用根证书签发服务端证书server.crt6.openssl x509 -req -days 365 -sha1 -CA root.crt -CAkey root_private.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt7.查看证书信息8.openssl x509 -in server.crt -text -noout9.将服务端证书转换为pkcs12格式,密码12345610.openssl pkcs12 -export -in server.crt -inkey server_private.key -out server.p1211.生成服务端秘钥库server.keystore,秘钥库密码也为12345612.keytool -importkeystore -srckeystore server.p12 -destkeystore server.keystore -srcstoretype pkcs1213.查看keystore14.keytool -list -v -keystore server.keystore1.3 使用根证书签发客户端证书•生成客户端私钥文件client_private.key•openssl genrsa -out client_private.key 1024•签名请求文件client.csr•openssl req -new -key client_private.key -out client.csr -subj "/C=CN/ST=GuangDong/L=ShenZhen/O=test-client/OU=test-client/CN=test-client"•使用根证书签发客户端证书client.crt•openssl x509 -req -days 365 -sha1 -CA root.crt -CAkey root_private.key -CAserial ca.srl -CAcreateserial -in client.csr -out client.crt•证书转换为pkcs12格式,密码123456•以上生成的公私钥和证书都是PEM格式的,服务端、浏览器一般使用PKCS12格式。

openssl的使用原理和应用

openssl的使用原理和应用

openssl的使用原理和应用1. 简介OpenSSL是一个开源的软件库,提供了一套用于SSL/TLS协议的加密算法、密码学函数和安全协议的实现。

它广泛应用于Web服务器、电子邮件服务器、VPN 服务器和其他SSL/TLS相关应用中,为数据传输和通信提供了安全保障。

2. 使用原理OpenSSL基于密码学原理和算法实现了对数据进行加密、解密、签名和验证的功能。

它支持的加密算法包括对称加密和非对称加密。

2.1 对称加密对称加密是一种加密和解密使用相同密钥的算法。

在使用openssl进行对称加密时,可以指定加密算法和密钥长度,如AES-256-CBC算法。

加密的过程中,OpenSSL会生成一个初始化向量(Initialization Vector,IV),并与明文进行异或操作后加密。

解密的过程中,使用相同的密钥和IV对密文进行解密,得到明文。

2.2 非对称加密非对称加密是一种使用公钥加密、私钥解密或者使用私钥签名、公钥验证的算法。

在使用OpenSSL进行非对称加密时,需要生成公钥和私钥对。

公钥用于加密数据,私钥用于解密数据或者签名数据。

在数据传输过程中,公钥可以公开,而私钥需要保密。

3. 应用场景OpenSSL具有广泛的应用场景,下面列举了几个常见的应用场景。

3.1 网络通信安全对于Web服务器、电子邮件服务器等网络应用,OpenSSL提供了SSL/TLS协议的实现,可以实现数据的加密和身份验证。

通过使用OpenSSL,可以保护敏感数据的安全传输,防止传输过程中的窃听和篡改。

3.2 数字证书管理OpenSSL支持数字证书的生成和管理。

数字证书用于验证与信任,包括SSL/TLS连接的双方身份认证、代码签名等。

OpenSSL提供了生成证书请求、自签名证书和CA签署证书等功能,方便进行数字证书的管理和使用。

3.3 数据加密和解密OpenSSL提供了对称加密和非对称加密算法的实现,可以用于对敏感数据进行加密和解密。

https学习笔记三----OpenSSL生成rootCA及签发证书

https学习笔记三----OpenSSL生成rootCA及签发证书

https学习笔记三----OpenSSL⽣成rootCA及签发证书⼀、openssl 简介⼆、安装openssl(linux CentOS7 32位)如果使⽤的是unix操作系统,可能安装系统的时候,这个库就已经有且存在了。

但是在使⽤前,需要注意下当前openssl的库的版本。

openssl versionOpenSSL 1.0.114 Mar 2012因为版本1.0.1是⼀个很重要的风⽔岭版本。

因为1.0.1是第⼀个⽀持TLS1.1和1.2的版本。

⽀持新的协议。

操作系统的选择也很重要,⽐如Ubuntu 12.04 LTS,客户端不⽀持SSL2。

这⾥安装以CentOS7系统为例:B、将下载的压缩包放在根⽬录下,解压缩,进⼊解压缩⽂件(得到openssl-openssl-1.0.0⽂件夹)cd openssl-1.0.0C、编译前配置openssl,执⾏命令:./config --prefix=/usr/local/openssl,其中 ( --prefix )参数为欲安装之⽬录,也就是安装后的档案会出现在该⽬录下。

D、编译openssl,执⾏命令: make install⼩插曲:安装openssl报错1、问题描述:安装完成,查看版本信息的时候报错了,缺少⼀个库⽂件libssl.so.1.1。

[root@b6e4cbd27773 /usr/local/openssl/bin]# openssl versionopenssl: error while loading shared libraries: libssl.so.1.1: cannot open sharedobject file: No such file or directory2、解决⽅法:有依赖没装libssl。

在/etc/ld.so.conf⽂件中写⼊openssl库⽂件的搜索路径,使⽤修改后的conf⽣效即可:echo "/usr/local/lib64" >> /etc/ld.so.confldconfig -v三、使⽤openssl⽣成RSA密钥对使⽤openssl的私钥产⽣公钥前,需要了解以下⼏点:1、key算法:openssl ⽀持⽣成RSA,DSA,ECDSA的密钥对,但是RSA是⽬前使⽤最普遍的。

python ssl 双向认证例程

python ssl 双向认证例程

Python SSL 双向认证例程1. 导言在网络通信中,安全性是至关重要的。

为了保障数据传输的安全性,很多应用程序都会采用SSL(Secure Socket Layer)协议进行加密通信。

而在SSL协议中,双向认证是一种较为安全的验证方式,可以有效防止中间人攻击。

Python作为一种广泛使用的编程语言,对于SSL 双向认证也有相应的支持。

本文将介绍Python中的SSL双向认证的例程及其实现。

2. 什么是SSL双向认证SSL双向认证,又称客户端证书认证,是指在SSL/TLS握手协商的过程中,服务器除了验证客户端的身份外,客户端也需要验证服务器的身份。

通常情况下,SSL/TLS的握手过程只需要服务器提供证书给客户端,客户端对证书进行验证,并与服务器协商密钥。

而双向认证则在这一过程中增加了客户端也提供证书给服务器,并由服务器进行验证的步骤。

3. Python中的SSL双向认证在Python中,SSL/TLS的双向认证可以通过ssl模块来实现。

ssl模块提供了对SSL/TLS协议的支持,并且可以进行双向认证。

下面将介绍Python中的SSL双向认证的例程。

4. 生成证书在进行SSL双向认证之前,首先需要生成证书。

证书是SSL/TLS通信中进行身份验证的重要依据,客户端和服务器都需要提供自己的证书。

可以使用openssl工具来生成证书。

首先生成服务器的私钥和公钥:```shellopenssl genrsa -out server.key 2048openssl req -new -key server.key -out server.csropenssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt```同样的,生成客户端的私钥和公钥:```shellopenssl genrsa -out client.key 2048openssl req -new -key client.key -out client.csropenssl x509 -req -days 365 -in client.csr -signkey client.key -out client.crt```生成完证书后,将服务器的公钥和证书放在server.crt文件中,将客户端的公钥和证书放在client.crt文件中。

04-06(WWW服务器openssl证书的颁发、openssh的使用、双机互信配置)

04-06(WWW服务器openssl证书的颁发、openssh的使用、双机互信配置)
7、执行以下语句来查看生成的证书的内容:
openssl x509 -in cert.pem -text -noout
8、 吊销证书(作废证书)
openssl ca -revoke cert.pem
9、准备公开被吊销的证书列表时,可以生成证书吊销列表(CRL)
openssl ca -gencrl -out testca.crl
-f 后面跟我们要讲一对密钥放置的位置。如果我们不跟的话默认刚在该家目录的.ssh/下。
-N 后跟密码,是给我们的密钥添加密码的。
如果将我们的生成的公钥放到远程登录服务器上?我们可以文件传输工具(ssh-copy-id,scp)
ssh-copy-id /path/to/pubkey user@remote
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
六、重新启动下我们的www服务器
#service httpd restart
七、使用浏览器输入我们的www服务器的地址
https://172.16.20.1
八. CA 的日常操作
1、创建私钥
3)、生成自签证书。
#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
4)、以上是创建CA所需要的文件和目录。
#mkdir /etc/pki/CA/{certs,crl,newcerts}
10、可以用以下命令检查testca.crl 的内容:
openssl crl -in testca.crl -text –noout

openssl自签名证书生成与单双向验证

openssl自签名证书生成与单双向验证

openssl⾃签名证书⽣成与单双向验证什么是CA:CA(Certificate Authority)是数字证书认证中⼼的简称。

是指发放、管理、废除数字证书的机构。

CA的作⽤是检查证书持有者⾝份的合法性。

并签发证书(在证书上签字),以防证书被伪造或篡改。

以及对证书和密钥进⾏管理。

SSL证书中DN(Distiguish Name)识别名的结构:遵循x.500标准,标识名的⽬的就是为每⼀个⽹络实体提供⼀个唯⼀的名字。

为了达到这⼀⽬的。

DN有⼀种分层结构。

⼀个DN由⼀些列的RDN(Relative distinguished name,相对标识名)构成。

RDN的乘此结构依次为:C = US, ST = Beijing, L = Beijing, O = RTFM, OU = Consulting, CN = Eric(C->Country, ST-> State or Provice Name, L->Locality Name, O->Organization, OU->Organization Unit, CN->CommonName)⽣成⾃签名证书的步骤:⼀、建⽴CA:1. 在随意⽬录建⽴⽬录,⽬录名称随意/home/gouxu/gx/key/2. 进⼊到新建⽴的⽬录keycd /home/gouxu/gx/key/3. ⽣成CA私钥openssl genrsa -out ca.key 2048參数说明:genrsa:⽣成rsa秘钥;-out ca.key ⽣成的秘钥⽂件为ca.key;2048: 秘钥长度为2048.4. ⽤CA私钥⽣成CA的证书openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=Teamsun"(-x509选项会⽣成⾃签名证书。

Openssl实现双向认证教程(附服务端客户端代码)

Openssl实现双向认证教程(附服务端客户端代码)

Openssl实现双向认证教程(附服务端客户端代码)⼀、背景说明1.1 ⾯临问题最近⼀份产品检测报告建议使⽤基于pki的认证⽅式,由于产品已实现https,商量之下认为其意思是使⽤双向认证以处理中间⼈形式攻击。

《信息安全⼯程》中接触过双向认证,但有两个问题。

第⼀个是当时最终的课程设计客户端是浏览器,服务端是tomcat双向认证只需要对两者进⾏配置并不需要⾃⼰真的实现代码。

第⼆个是虽然课程也有接近双向认证的实现代码,但当时是Java+JCE环境现在要⽤C+++OpenSSL环境,总体意思确实还是差不多但具体函数和参数差别还是不少。

所以眼下有的是:证书⽣成的思想+双向认证实现的思想。

对读者⽽⾔,即要假定已对证书、SSL/TSL、socket编程等⼏个概念有基本的了解,本⽂不做详细介绍。

基于此本⽂要解决的问题是:openssl具体如何⽣成证书+openssl如何实现双向认证。

双向认证的关键点在以下⼏个函数(服务端和客户端都⼀样),其他就不细说参看代码注释:SSL_CTX_set_verify----配置启⽤双向认证SSL_CTX_load_verify_locations----加载信任的根证书SSL_CTX_use_certificate_file----加载⾃⼰的证书SSL_CTX_use_PrivateKey_file----加载⾃⼰的私钥SSL_get_verify_result----真正进⾏验证,⼀定要调⽤这个函数不然前⾯四个光配置⽽已并不会进⾏双向验证⼆、双向认证程序实现2.1 安装openssl及开发apiapt-get install libssl-dev2.2 服务端代码#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#include <unistd.h>#include <arpa/inet.h>#include <openssl/ssl.h>#include <openssl/err.h>#define MAXBUF 1024void ShowCerts(SSL * ssl){X509 *cert;char *line;cert = SSL_get_peer_certificate(ssl);// SSL_get_verify_result()是重点,SSL_CTX_set_verify()只是配置启不启⽤并没有执⾏认证,调⽤该函数才会真证进⾏证书认证// 如果验证不通过,那么程序抛出异常中⽌连接if(SSL_get_verify_result(ssl) == X509_V_OK){printf("证书验证通过\n");}if (cert != NULL) {printf("数字证书信息:\n");line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);printf("证书: %s\n", line);free(line);line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);printf("颁发者: %s\n", line);free(line);X509_free(cert);} elseprintf("⽆证书信息!\n");}int main(int argc, char **argv) {int sockfd, new_fd;socklen_t len;struct sockaddr_in my_addr, their_addr;unsigned int myport, lisnum;char buf[MAXBUF + 1];SSL_CTX *ctx;if (argv[1])myport = atoi(argv[1]);elsemyport = 7838;if (argv[2])lisnum = atoi(argv[2]);elselisnum = 2;/* SSL 库初始化 */SSL_library_init();/* 载⼊所有 SSL 算法 */OpenSSL_add_all_algorithms();/* 载⼊所有 SSL 错误消息 */SSL_load_error_strings();/* 以 SSL V2 和 V3 标准兼容⽅式产⽣⼀个 SSL_CTX ,即 SSL Content Text */ctx = SSL_CTX_new(SSLv23_server_method());/* 也可以⽤ SSLv2_server_method() 或 SSLv3_server_method() 单独表⽰ V2 或 V3标准 */if (ctx == NULL) {ERR_print_errors_fp(stdout);exit(1);}// 双向验证// SSL_VERIFY_PEER---要求对证书进⾏认证,没有证书也会放⾏// SSL_VERIFY_FAIL_IF_NO_PEER_CERT---要求客户端需要提供证书,但验证发现单独使⽤没有证书也会放⾏ SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER|SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);// 设置信任根证书if (SSL_CTX_load_verify_locations(ctx, "ca.crt",NULL)<=0){ERR_print_errors_fp(stdout);exit(1);}/* 载⼊⽤户的数字证书,此证书⽤来发送给客户端。

SSL双向认证之客户端

SSL双向认证之客户端
void print_peer_certificate(SSL *ssl)
{
X509* cert= NULL;
X509_NAME *name=NULL;
char buf[8192]={0};
BIO *bio_cert = NULL;
本文主要介绍openssl进行客户端-服务器双向验证的通信,客户端应该如何设置。包括了如何使用openssl指令生成客户端-服务端的证书和密钥,以及使用openssl自带server端来实现简单的ssl双向认证,client端代码中也做了相应的标注和说明,提供编译的Makefile.希望对开始学习如何使用openssl进行安全连接的朋友有益。
int connect_to_server(int fd ,char* ip,int port){
struct sockaddr_in svr;
memset(&svr,0,sizeof(svr));
svr.sin_family = AF_INET;
svr.sin_port = htons(port);
//set cipher ,when handshake client will send the cipher list to server
SSL_CTX_set_cipher_list(g_sslctx,"HIGH:MEDIA:LOW:!DH");
//SSL_CTX_set_cipher_list(g_sslctx,"AES128-SHA");
Openssl双向认证客户端代码
openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。

SSL双向认证过程

SSL双向认证过程

SSL双向认证过程SSL(Secure Sockets Layer)是一种常用的网络安全协议,用于在客户端与服务器之间建立安全的通信连接。

SSL双向认证,也称为客户端证书认证,是一种加强认证安全性的方式,需要客户端和服务器互相验证对方的身份。

以下是SSL双向认证的详细过程:1.客户端发起请求:客户端向服务器发起SSL连接请求,请求建立安全的通信连接。

2.服务器发送证书:服务器收到请求后,向客户端发送自己的数字证书。

数字证书是由可信的第三方机构颁发的,用于证明服务器的身份的文件。

证书中包含了服务器的公钥,以及颁发机构的数字签名。

3.客户端验证证书:客户端收到服务器的证书后,首先要验证证书的合法性。

验证方式如下:-客户端使用内置的根证书颁发机构列表,对服务器的证书进行验证。

如果证书有效且可信,则进入下一步。

否则,客户端会警告用户证书不受信任或无效。

- 客户端提取证书中的公钥,并使用颁发机构的公钥对证书进行验证。

验证通过后,客户端生成一个随机值(Pre-master Secret)。

- 客户端使用服务器的公钥对Pre-master Secret进行加密,然后发送给服务器。

4. 服务器解密Pre-master Secret:服务器收到客户端的加密Pre-master Secret后,使用自己的私钥进行解密,得到Pre-master Secret。

5. 客户端和服务器生成会话密钥:客户端和服务器分别使用Pre-master Secret生成会话密钥(Session Key)。

6.客户端发送加密信息:客户端使用会话密钥对消息进行加密,并发送给服务器。

7.服务器解密信息:服务器收到加密消息后,使用会话密钥解密,获取原始信息。

8.服务器发送加密响应:服务器使用会话密钥对响应进行加密,然后发送给客户端。

9.客户端解密响应:客户端收到加密响应后,使用会话密钥解密,获取原始响应。

通过以上过程,客户端和服务器建立了一个安全的通信连接,双方可以进行加密通信,确保数据的机密性和完整性。

WEB服务器SSL双向认证安装使用指南

WEB服务器SSL双向认证安装使用指南

WEB服务器SSL双向认证安装使用指南一、SSL证书的准备在进行SSL双向认证前,我们需要准备以下材料:1.服务器的私钥和证书签名请求文件(CSR);2.CA机构签发的数字证书;3.客户端的数字证书。

二、生成服务器私钥和证书签名请求文件1.在服务器上生成私钥:运行以下命令:openssl genrsa -out server.key 2048这将生成一个2048位的私钥file。

2.生成CSR文件:三、获取CA机构签发证书1.将CSR文件发送给CA机构:将生成的server.csr文件发送给CA机构,并根据CA机构的要求进行身份验证。

2.获取CA机构签发的数字证书:CA机构将根据验证结果进行相应处理,如果验证通过,将会签发一个数字证书,通常是一个.crt文件。

四、生成客户端证书1.生成私钥:运行以下命令:openssl genrsa -out client.key 2048这将生成一个2048位的客户端私钥file。

2.生成CSR文件:运行以下命令:openssl req -new -subj "/CN=client" -key client.key -out client.csr3.获取CA签发的数字证书:将生成的client.csr文件发送给CA机构,获取CA机构签发的数字证书.crt文件。

五、安装证书1.安装服务器证书:将服务器证书文件(.crt)和私钥文件(.key)放置在服务器的SSL 证书存储路径下,通常是/etc/ssl/certs和/etc/ssl/private。

2.安装客户端证书:将客户端证书文件(.crt)和私钥文件(.key)放置在客户端的SSL 证书存储路径下,通常是浏览器的证书库或操作系统的个人证书库。

六、配置WEB服务器1.配置服务器:在WEB服务器的配置文件中,添加以下内容:SSLCertificateFile /etc/ssl/certs/server.crtSSLCertificateKeyFile /etc/ssl/private/server.keySSLCACertificateFile /etc/ssl/certs/ca.crtSSLVerifyClient requireSSLVerifyDepth 32.重启服务器:完成配置后,重启WEB服务器以使配置生效。

利用openSSL实现SSl双向认证学习笔记

利用openSSL实现SSl双向认证学习笔记

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机器上一直有,不是这次特意安装的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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:。

相关文档
最新文档