添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

: 需要了解的一些函数 :

1.int    SSL_CTX_set_cipher_list(SSL_CTX *,const char *str);
根据 SSL/TLS 规范 , ClientHello , 客户端会提交一份自己能够支持的加密方法的列表 , 由服务端选择一种方法后在 ServerHello 中通知服务端 , 从而完成加密算法的协商 .

可用的算法为 :
EDH-RSA-DES-CBC3-SHA
EDH-DSS-DES-CBC3-SHA
DES-CBC3-SHA
DHE-DSS-RC4-SHA
IDEA-CBC-SHA
RC4-SHA
RC4-MD5
EXP1024-DHE-DSS-RC4-SHA
EXP1024-RC4-SHA
EXP1024-DHE-DSS-DES-CBC-SHA
EXP1024-DES-CBC-SHA
EXP1024-RC2-CBC-MD5
EXP1024-RC4-MD5
EDH-RSA-DES-CBC-SHA
EDH-DSS-DES-CBC-SHA
DES-CBC-SHA
EXP-EDH-RSA-DES-CBC-SHA
EXP-EDH-DSS-DES-CBC-SHA
EXP-DES-CBC-SHA
EXP-RC2-CBC-MD5
EXP-RC4-MD5
这些算法按一定优先级排列 , 如果不作任何指定 , 将选用 DES-CBC3-SHA. SSL_CTX_set_cipher_list 可以指定自己希望用的算法 ( 实际上只是 提高其优先级 , 是否能使用还要看对方是否支持 ).

我们在程序中选用了 RC4 做加密 ,MD5 做消息摘要 ( 先进行 MD5 运算 , 后进行 RC4 加密 ).
SSL_CTX_set_cipher_list(ctx,"RC4-MD5");

在消息传输过程中采用对称加密 ( 比公钥加密在速度上有极大的提高 ), 其所用秘钥 (shared secret) 在握手过程中中协商 ( 每次对话过程均不同 , 在一次对话中都有可能有几次改变 ), 并通过公钥加密的手段由客户端提交服务端 .

2.void SSL_CTX_set_verify(SSL_CTX *ctx,int mode,int (*callback)(int, X509_STORE_CTX *));
SSL_VERIFY_NONE, 如果想要验证对方的话 便要将此项变成 SSL_VERIFY_PEER.SSL/TLS 中缺省只验证 server, 如果没有设置 SSL_VERIFY_PEER 客户端连证书都不会发过来 .

3.int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile,const char *CApath);
要验证对方的话 当然装要有 此函数用来便是加载 的证书文件的 .

4.int SSL_CTX_use_certificate_file(SSL_CTX *ctx, const char *file, int type);
加载自己的证书文件 .

5.int SSL_CTX_use_PrivateKey_file(SSL_CTX *ctx, const char *file, int type);
加载自己的私钥 以用于签名 .

6.int SSL_CTX_check_private_key(SSL_CTX *ctx);
调用了以上两个函数后 自己检验一下证书与私钥是否配对 .
7.void RAND_seed(const void *buf,int num);
win32 client 程序运行时出错 (SSL_connect 的一个主要机制便是与 平台下的随机数生成机制不同 握手的时候用的到 具体描述可见 mod_ssl 解决办法就是调用此函数 应该为一随机的字符串 "seed".
还可以采用一下两个函数 :
void RAND_screen(void);
int RAND_event(UINT, WPARAM, LPARAM);
RAND_screen() 以屏幕内容作为 "seed" 产生随机数 ,RAND_event windows (event), 以此为基础产生随机数 如果一直有 用户干预的话 用这种办法产生的随机数能够 但如果机器一直没人理 如总停在登录画面 则每次都将产生同样的数字 这几个函数都只在 WIN32 环境下编译时有用 下就不必调了 大量其他的相关函数原型 crypto/rand/rand.h.

8.OpenSSL_add_ssl_algorithms()
SSLeay_add_ssl_algorithms()
其实都是调用 int SSL_library_init(void)
进行一些必要的初始化工作 openssl SSL/TLS 程序的话第一句便应是它 .

9.void    SSL_load_error_strings(void );
如果想打印出一些方便阅读的调试信息的话 便要在一开始调用此函数 .

10.void ERR_print_errors_fp(FILE *fp);
如果调用了 SSL_load_error_strings() 便可以随时用 ERR_print_errors_fp() 来打印错误信息了 .

11.X509 *SSL_get_peer_certificate(SSL *s);
握手完成后 便可以用此函数从 结构中提取出对方的证书 此时证书得到且已经验证过了 .

12.X509_NAME *X509_get_subject_name(X509 *a);
得到证书所有者的名字 参数可用通过 SSL_get_peer_certificate() .

13.X509_NAME *X509_get_issuer_name(X509 *a)
得到证书签署者 参数可用通过 SSL_get_peer_certificate() .

14.char *X509_NAME_oneline(X509_NAME *a,char *buf,int size);
将以上两个函数得到的对象变成字符型 以便打印出来 .

15.SSL_METHOD
的构造函数
SSL_METHOD *TLSv1_server_method(void);    /* TLSv1.0 */
SSL_METHOD *TLSv1_client_method(void);    /* TLSv1.0 */

SSL_METHOD *SSLv2_server_method(void);    /* SSLv2 */
SSL_METHOD *SSLv2_client_method(void);    /* SSLv2 */

SSL_METHOD *SSLv3_server_method(void);    /* SSLv3 */
SSL_METHOD *SSLv3_client_method(void);    /* SSLv3 */

SSL_METHOD *SSLv23_server_method(void);    /* SSLv3 but can rollback to v2 */
SSL_METHOD *SSLv23_client_method(void);    /* SSLv3 but can rollback to v2 */
在程序中究竟采用哪一种协议 (TLSv1/SSLv2/SSLv3), 就看调哪一组构造函数了 libuv- tls 使用 OpenSSL 在libuv之上添加 SSL / TLS 功能。 这个小型图书馆在libuv上使用BIO对添加了 SSL / TLS 功能。 它尝试提供与libuv类似的API,但几乎没有任何变化。 它还尝试使用 OpenSSL 提供的功能。 目前,它仅会刮擦BIO对。 随着我们对 OpenSSL 和libuv的了解越来越多,这可能会消失。 编写 我们自己的自定义BIO将带来更大的灵活性。 如果可以尽快完成,我们打算将该库作为libuv的子部分提供。 添加会话恢复功能-可能是更高版本 重新协商尚未处理-可能是更高版本 致力于支持D TLS 支持-更高版本 从事建筑和包装工作 用法和API libuv- tls 具有与libuv相似的API。 任何libuv用户可以方便地使用在看的API uv py OpenSSL -一个围绕 OpenSSL 库的Python包装器 注意: Python密码管理局强烈建议在可能的情况下使用 。 如果您使用py OpenSSL 进行除建立 TLS 连接以外的任何操作,则应转到加密方法并删除py OpenSSL 依赖项。 围绕 OpenSSL 库的子集的高级包装。 包括 SSL .Connection对象,包装Python的可移植套接字的方法 用Python 编写 的回调 广泛的错误处理机制,镜像 OpenSSL 的错误代码 ... 以及更多。 您可以在找到更多信息。 开发在。 如果您遇到错误,可以将其提交到我们的。 我们为用户和开发讨论维护了一个邮件列表。 您也可以在Freenode上加入#cryptography-dev来提问或参与。 nginx配置 ssl 报错: 查了nginx官方更新日志发现, ssl 指令在1.15.0版本之后已经弃用,在1.15.0版本之后作为listen 的参数进行使用。使用方法: listen 443 ssl ; 去掉 ssl on; 使用listen 443 ssl ;后问题解决。 SSL 的优点 (1)提供较高的安全性保证。 SSL 利用数据加密、身份验证和消息完整性验证机制,保证数据传输的安全性。 (2)支持各种应用层协议。虽然 SSL 设计的初衷是为了解决Web安全性问题,但是由于 SSL 位于应用层和传输层之间,它可以为任何基于TCP等可靠连接的应用层协议提供安全性保证。 (3)部署简单。目前 SSL 己经成为网络中用来鉴别 一个加密套件指明了 SSL 握手阶段和通信阶段所应该采用的各种算法。这些算法包括:认证算法、密钥交换算法、对称算法和摘要算法等。 在握手初始化的时候,双方都会导入各自所认可的多种加密套件。在握手阶段,由服务端选择其中的一种加密套件。 OpenSSL 的ciphers命令可以列出所有的加密套件。 openssl 的加密套件在s3_lib.c 的 ssl 3_ciphers数组中定义。比如有: 客户端 程序 代码: //client  #include   #include   #include   #include " openssl /x509.h"  #include " openssl / ssl .h"  #include " openssl /err.h"  #include " openssl /rand.h"  #define PORT       1111  #define SERVER   我正在 编写 用于通信的 SSL 服务器和客户端。 我有以下服务器代码 SSL _CTX* InitServerCTX(void){ SSL _METHOD *method; SSL _CTX *ctx; SSL _library_init(); OpenSSL _add_all_algorithms(); /* load & register all cryptos, etc. */ SSL _load... 1.1 看到这个报错都知道啥意思: 网上查询有说需要换证书的,但是这是我自己建的私有CA,重新创建几次也没有报错 [root@centos8 /apps/nginx]#nginx -t nginx: [emerg] SSL _CTX_use_PrivateKey("/apps/nginx/certs/www.xlj.org.key") failed ( SSL : error:0B080074:x509 certificate routines:X509_check_private_key:key va 31.1 概述 SSL 协议最先由netscape公司提出,包括 ssl v2和 ssl v3两个版本。当前形成标准为 tls 协议(rfc2246规范)和D TLS (rfc4347,用于支持UDP协议)。 ssl v3和 tls 协议大致一样。 SSL 协议能够保证通信双方的信道安全。他能提供数据加密、身份验证以及消息完整性保护。 SSL 协议通过客户端和服务端握手来协商各种算法和密钥。31.2 openssl 实现SS... 1、首先在打开宏USE_CYA SSL ,在simple_http.h头文件定义 #define USE_CYA SSL 2、在simple_http.c 文件包含自己的头文件,因为https接口函数都在此文件中 #include "simple_http.h" #ifdef USE_CYA SSL #includ 学习如何使用 OpenSSL —— 用于安全通信的最著名的开放库 —— 的 API 有些强人所难,因为其文档并不完全。您可以通过本文中的提示补充这方面的知识,并驾驭该 API。在建立基本的连接之后,就可以查看如何使用 OpenSSL 的 BIO 库来建立安全连接和非安全连接。与此同时,您还会学到一些关于错误检测的知识。 OpenSSL API 的文档有些含糊不清。因为还没有多少关于 OpenSS    最近工作涉及到https,需要修改nginx的 openssl 模块,引入keyless方案。关于keyless可以参考CloudFlare的官方博客: https://blog.cloudflare.com/keyless- ssl -the-nitty-gritty-technical-details/?utm_source=tuicool&utm_medium=referral。 在 openssl 的基础上修改私钥校验过程,因此需要对 openssl 的认证认证流程需要熟悉一下。 SSL