一、
简介
现在网上有关
SSL的资料较多的是基于
VC开发,
Delphi的
SSL开发资源很少。
本文主要使用
OpenSSL为基础,讲述
SSL的有关开发流程。
OpenSSL功能非常丰富,具体可以去她的官方网看看。可惜没有中文说明。
OpenSSL:
http://www.openssl.org/
一.1、
SSL协议是什么
SSL 是一个缩写,代表的是
Secure Sockets Layer。它是支持在
Internet 上进行安全通信的标准,并且将数据密码术集成到了协议之中。数据在离开您的计算机之前就已经被加密,然后只有到达它预定的目标后才被解密。证书和密码学算法支持了这一切的运转,使用
OpenSSL,您将有机会切身体会它们。
理论上,如果加密的数据在到达目标之前被截取,那些数据是不可能被破解的。不过,由于计算机的变化一年比一年快,而且密码翻译方法有了新的发展,因此,
SSL 中使用的加密协议被破解的可能性也在增大。
可以将
SSL 和安全连接用于
Internet 上任何类型的协议,不管是
HTTP、
POP3,还是
FTP。还可以用
SSL 来保护
Telnet 会话。虽然可以用
SSL 保护任何连接,但是不必对每一类连接都使用
SSL。如果连接传输敏感信息,则应使用
SSL。
一.2、
什么是
OpenSSL?
OpenSSL 不仅仅是
SSL。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字。关于
OpenSSL 库的内容非常多,远不是一篇文章可以容纳的。
OpenSSL 不只是
API,它还是一个命令行工具。命令行工具可以完成与
API 同样的工作,而且更进一步,可以测试
SSL 服务器和客户机。它还让开发人员对
OpenSSL 的能力有一个认识。
二、
CA概念描述
CA是证书的签发机构,它是
PKI的核心。
CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。
CA 也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证
CA 的签字从而信任
CA ,任何人都可以得到
CA 的证书(含公钥),用以验证它所签发的证书。
如果用户想得到一份属于自己的证书,他应先向
CA 提出申请。在
CA 判明申请者的身份后,便为他分配一个公钥,并且
CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。
如果一个用户想鉴别另一个证书的真伪,他就用
CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。
二.1、
证书
证书实际是由证书签证机关(
CA)签发的对用户的公钥的认证。
证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循
X。
509 国际标准。
如何在电子文档上实现签名的目的呢?我们可以使用数字签名。
RSA公钥体制可实现对数字信息的数字签名,方法如下:
信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行
RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在传递过程中未被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。
在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数
(HASH函数
) 生成的。对这些
HASH函数的特殊要求是:
1.接受的输入报文数据没有长度限制;
2.对任何输入报文数据生成固定长度的摘要
(数字指纹
)输出;
3.从报文能方便地算出摘要;
4.难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要;
5.难以生成两个不同的报文具有相同的摘要。
验证:
收方在收到信息后用如下的步骤验证您的签名:
1.使用自己的私钥将信息转为明文;
2.使用发信方的公钥从数字签名部分得到原摘要;
3.收方对您所发送的源信息进行
hash运算,也产生一个摘要;
4.收方比较两个摘要,如果两者相同,则可以证明信息签名者的身份。
如果两摘要内容不符,会说明什么原因呢?
可能对摘要进行签名所用的私钥不是签名者的私钥,这就表明信息的签名者不可信;也可能收到的信息根本就不是签名者发送的信息,信息在传输过程中已经遭到破坏或篡改。
二.2、
数字证书
数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。
二.3、
使用数字证书能做什么
?
数字证书在用户公钥后附加了用户信息及
CA的
签名。公钥是密钥对的一部分,另一部分是私钥。公钥公之于众,谁都可以使用。私钥只有自己知道。由公钥加密的信息只能由与之相对应的私钥解密。为确保只有
某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件;收件人便可用自己的私钥解密信件。同样,为证实发件人的身份,发送者要用自己的私钥对信件进
行签名;收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。
在线交易中您可使用数字证书验证对方身份。用数字证书加密信息,可以确保只有接收者才能解密、阅读原文,信息在传递过程中的保密性和完整性。有了数字证书网上安全才得以实现,电子邮件、在线交易和信用卡购物的安全才能得到保证。
二.4、
认证、数字证书和
PKI解决的几个问题
l
保密性
- 只有收件人才能阅读信息。
l
认证性
- 确认信息发送者的身份。
l
完整性
- 信息在传递过程中不会被篡改。
l
不可抵赖性
- 发送者不能否认已发送的信息。
三、
搭建
SSL工作流程
(搭建
OpenSSL)
(根证书获取方法图)
四、
开发
四.1、
编译
OpenSSL
四.1.1、
搭建准备工作
1、 OpenSSL源代码,可以直接到官网下载最新代码。
2、 标准
C编译器(可以用
VC,这里使用的是
VC),编译动态库。
3、 Perl5编译环境,
OpenSSL编译需要
Perl环境。官网有的下。
四.1.2、
编译动态库
OpenSSL源代码库路径:
c:"opensslsource
1、 进入
VC命令行编译环境
2、 进入
OpenSSL源代码目录:
cd c:"opensslsource
3、 执行
configure:
perl Configure VC-WIN32 --prefix=c:/openssl
4、 创建
Makefile文件:
ms"do_ms
5、 编译动态库:
nmake –f ms"ntdll.mak
6、 测试动态库:
nmake –f ms"ntdll.mak test
7、 安装动态库:
nmake –f ms"ntdll.mak install
8、 清除零时文件,以后便于重新编译:
nmake –f ms"ntdll.mak clean
说明:要生成
VC的静态库只要编译
ms"nt.mak 的
make文件。
四.2、
生成证书
由于
OpenSSL的命令繁多,这里不详细说明。具体可以看:
BBS水木清华站
(FriNov1020:
24:
102000) fordesign@21cn.com
翻译的内容。已经整理成文档放在目录中。
四.2.1、
生成服务器端的私钥
(key文件
)
openssl genrsa -des3 -out server。
key 1024
运行时会提示输入密码,此密码用于加密
key文件
(参数
des3便是指加密算法,当然也可以选用其他你认为安全的算法。
),以后每当需读取此文件
(通过
openssl提供的命令或
API)都需输入口令。如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施
!
去除
key文件口令的命令:
openssl rsa -in server.key -out server.key
四.2.2、
生成证书请求
openssl req -new -key server.key -out server.csr -config openssl.cnf
生成
Certificate Signing Request(
CSR),生成的
csr文件交给
CA签名后形成服务端自己的证书。屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可。
四.2.3、
生成客户
key及
csr文件
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr -config openssl.cnf
四.2.4、
CA证书签证
CSR文件必须有
CA的签名才可形成证书,可将此文件发送到
verisign等地方由它验证。
CA验证需要服务费,做测试使用可以自己生成。
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf
四.2.5、
生成签证文件
用生成的
CA的证书为刚才生成的
server。
csr,
client。
csr文件签名:
Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
四.2.6、
合成
pem文件
Pem文件是
X.509 PAM 编码
(Base64)文件,是个文本文件。可以使用
x.509命令进行合成,或直接拷贝粘贴。
上面生成的
server文件和
client文件合并成
2个
pem文件。
server使用的文件有:
ca.crt,
server.crt,
server.key
client使用的文件有:
ca.crt,
client.crt,
client.key
把
.crt文件和
.key文件合并到同一个文件
.pem文件。
四.3、
Delphi接入
上面生成
OpenSSL动态库我们现行可以直接加载使用。另外
Indy组件封装了
OpenSSL的功能模块,可以引用
uIdSSLOpenSSLHeaders.pas单元文进行开发。
直接加载动态库开发比较烦琐,所以我们直接适用
Indy提供的单元开发。
Indy单元文件实现的版本比较老,因此新
DLL加载会发生错误。在网上找到一个支持
0.9.7i OpenSSL较新动态库的
Indy单元文件。
具体的开发应用可以看
Source中的代码。
四.3.1、
服务器端调用流程
四.3.2、
客户段调用流程
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
X.509是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准。
PKCS#7 常用的后缀是: .P7B .P7C .SPC
PKCS#12 常用的后缀有: .P12 .PFX
X.509 DER 编码(ASCII)的后缀是: .DER .CER .CRT
X.509 PAM 编码(Base64)的后缀是: .PEM .CER .CRT
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。
.pem跟crt/cer的区别是它以Ascii来表示。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式
p10是证书请求
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
相关推荐
标题中的"TMQTTClient-delphi.rar_MQTT delphi_TMQTTClient-delphi_delphi ssl"揭示了这个压缩包包含的是一个适用于Delphi开发环境的MQTT客户端库,名为TMQTTClient-delphi,特别强调了它支持SSL/TLS加密连接。...
在Delphi编程环境中,开发涉及安全通信的应用时,SSL(Secure Socket Layer)库扮演着至关重要的角色。"delphi ssl库 IdSSLIOHandlerSocket1"是专门为Delphi7设计的一个SSL组件,它允许开发者实现HTTPS协议,以进行...
在使用DELPHIXE10.3.1进行IDHTTP组件开发时,SSL支持是至关重要的,因为IDHTTP是Delphi提供的一个用于HTTP协议的组件,它能够处理HTTP请求并获取响应。SSL(Secure Sockets Layer)现在通常指的是TLS(Transport ...
在Delphi 7开发环境中,如果你使用Indy 9组件进行网络通信并希望实现SSL(Secure Sockets Layer)加密,那么必须了解如何正确地集成OpenSSL库。标题中提到的"Delphi7 indy9 ssl使用的两个动态库"指的是OpenSSL的两个...
示例用Delphi的Indy控件,试过用163或139邮箱发送,可以用普通端口25或SSL端口发送,可以发送附件。 内含2002年的ssleay32.dll和libeay32.dll,其它版本可能会报错“Could not load SSL library”。 smtp.163.com ...
在使用DELPHI7进行IDHTTP组件开发以支持SSL(安全套接字层)通信时,可能会遇到需要依赖外部DLL文件的情况。这里的"libeay32.DLL"和"ssleay32.DLL"是两个关键的动态链接库文件,它们与OpenSSL库紧密相关,用于实现...
在Delphi 7中,当开发人员使用Indy组件,尤其是涉及到SSL/TLS通信的组件,如TIdHTTPSServer或TIdHTTPClient,这两个动态链接库将被自动加载并使用。通过它们,开发者可以创建安全的HTTPS服务器或客户端,实现符合SSL...
《Delphi7与Indy9 SSL动态库:解决初次调用错误问题》 在软件开发过程中,尤其是在使用网络通信组件时,SSL(Secure Sockets Layer)安全套接字层是必不可少的一部分,它提供了数据传输的安全保障。对于使用Delphi7...
在这个场景中,"create_cert.zip_SSL DELPHI_delphi cert_ssl" 提示我们,这个压缩包包含了一种在Delphi环境中创建SSL证书的工具或教程。 `create_cert.exe` 可能是一个执行文件,用于生成SSL证书。在开发涉及HTTPS...
在Delphi 7这样的老版本开发环境中,开发者们常常需要处理HTTP请求以及与SSL(Secure Socket Layer)安全协议的集成,以确保数据传输的安全性。本篇将详细介绍Delphi 7环境下使用HTTPClient库进行HTTP和SSL通信的...
在Delphi 2010中使用Indy 10进行SSL通信时,开发者需要依赖两个重要的动态链接库(DLLs):libeay32.dll和ssleay32.dll。这两个动态库是OpenSSL库的一部分,OpenSSL是一个开源项目,提供了用于加密通信和安全套接层...
Indy SSL库是针对Delphi 7开发的一款用于实现安全套接层(SSL)协议的组件库,它基于OpenSSL库。OpenSSL是一个强大的安全套接层密码库,包含了各种主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供...
Delphi 是一款强大的Object Pascal编程环境,广泛用于开发Windows和Web应用程序。当涉及到SSL连接时,开发者通常会遇到以下几个关键知识点: 1. **Indy库**:Indy(Internet Direct)是Delphi中的一个网络通信库,...
hi this is Delphi SSL component source code for use this code and create secure communication between client and server application.
在win7 64位环境下亲测可用于delphixe10各版本,indy+ssl收发邮件,和qq邮箱,126邮箱互通。 配置时: OpenSSLHandler.SSLOptions.Method := sslvTLSv1; OpenSSLHandler.SSLOptions.Mode := sslmClient; POP3....
Indy9 for Delphi SSLDemo 是一个用于Delphi开发环境的示例项目,它展示了如何在 Indy9 库中实现SSL(Secure Sockets Layer)和TLS(Transport Layer Security)安全通信协议。Indy9 是一个广泛使用的开源网络组件库...
1. 支持SSL发送邮件; 2. 支持32位和64位程序; 3. 支持纯文本邮件和 HTML 格式邮件; 4. 支持同步发送邮件和异步(线程)发送邮件 5. 支持发送结果回调; 6. 只需要调用一个函数,使用简单;
《Delphi 10.1 Berlin DataSnap 开发手册》是由知名技术专家李维编写的,专注于介绍如何在Delphi 10.1 Berlin环境中利用DataSnap技术进行服务器端和客户端应用的开发。DataSnap是Embarcadero Delphi中的一个强大功能...
Delphi是一款强大的Windows应用程序开发工具,它支持创建原生的Win32和Win64应用程序,SSL的集成可以增强其网络通信的安全性。 "email_ssl" 则强调了SSL技术在这个上下文中的具体应用,即增强电子邮件服务的安全性...
在Delphi7开发环境中, Indy 是一个非常流行的网络通信组件库,它支持多种协议,包括HTTP和HTTPS。在实现HTTPS GET POS(通过HTTPS获取POS,可能是指Point of Sale系统的数据)功能时,可能会涉及到额外的DLL(动态...