禁用的算法
为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
1.对称加密算法
OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。
2.非对称加密算法
OpenSSL一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法一般用户密钥交换。RSA算法既可以用于密钥交换,也可以用于数字签名,当然,如果你能够忍受其缓慢的速度,那么也可以用于数据加密。DSA算法则一般只用于数字签名。
3.信息摘要算法
OpenSSL实现了5种信息摘要算法,分别是MD2、MD5、MDC2、SHA(SHA1)和RIPEMD。SHA算法事实上包括了SHA和SHA1两种信息摘要算法,此外,OpenSSL还实现了DSS标准中规定的两种信息摘要算法DSS和DSS1。
4.密钥和证书管理
密钥和证书管理是PKI的一个重要组成部分,OpenSSL为之提供了丰富的功能,支持多种标准。
首先,OpenSSL实现了ASN.1的证书和密钥相关标准,提供了对证书、公钥、私钥、证书请求以及CRL等数据对象的DER、PEM和BASE64的编解码功能。OpenSSL提供了产生各种公开密钥对和对称密钥的方法、函数和应用程序,同时提供了对公钥和私钥的DER编解码功能。并实现了私钥的PKCS#12和PKCS#8的编解码功能。OpenSSL在标准中提供了对私钥的加密保护功能,使得密钥可以安全地进行存储和分发。
在此基础上,OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
5.SSL和TLS协议
OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协议。OpenSSL也实现了TLSv1.0,TLS是SSLv3的标准化版,虽然区别不大,但毕竟有很多细节不尽相同。
虽然已经有众多的软件实现了OpenSSL的功能,但是OpenSSL里面实现的SSL协议能够让我们对SSL协议有一个更加清楚的认识,因为至少存在两点:一是OpenSSL实现的SSL协议是开放源代码的,我们可以追究SSL协议实现的每一个细节;二是OpenSSL实现的SSL协议是纯粹的SSL协议,没有跟其它协议(如HTTP)协议结合在一起,澄清了SSL协议的本来面目。
6.应用程序
OpenSSL的应用程序已经成为了OpenSSL重要的一个组成部分,其重要性恐怕是OpenSSL的开发者开始没有想到的。现在OpenSSL的应用中,很多都是基于OpenSSL的应用程序而不是其API的,如OpenCA,就是完全使用OpenSSL的应用程序实现的。OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的,所以也是一些非常好的OpenSSL的API使用范例,读懂所有这些范例,你对OpenSSL的API使用了解就比较全面了,当然,这也是一项锻炼你的意志力的工作。
OpenSSL的应用程序提供了相对全面的功能,在相当多的人看来,OpenSSL已经为自己做好了一切,不需要再做更多的开发工作了,所以,他们也把这些应用程序成为OpenSSL的指令。OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。
7.Engine机制 Engine机制的出现是在OpenSSL的0.9.6版的事情,开始的时候是将普通版本跟支持Engine的版本分开的,到了OpenSSL的0.9.7版,Engine机制集成到了OpenSSL的内核中,成为了OpenSSL不可缺少的一部分。 Engine机制目的是为了使OpenSSL能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密。OpenSSL的Engine机制成功地达到了这个目的,这使得OpenSSL已经不仅仅使一个加密库,而是提供了一个通用地加密接口,能够与绝大部分加密库或者加密设备协调工作。当然,要使特定加密库或加密设备更OpenSSL协调工作,需要写少量的接口代码,但是这样的工作量并不大,虽然还是需要一点密码学的知识。Engine机制的功能跟Windows提供的CSP功能目标是基本相同的。目前,OpenSSL的0.9.7版本支持的内嵌第三方加密设备有8种,包括:CryptoSwift、nCipher、Atalla、Nuron、UBSEC、Aep、SureWare以及IBM 4758 CCA的硬件加密设备。现在还出现了支持PKCS#11接口的Engine接口,支持微软CryptoAPI的接口也有人进行开发。当然,所有上述Engine接口支持不一定很全面,比如,可能支持其中一两种公开密钥算法。
8.辅助功能
BIO机制是OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。
OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提。
OpenSSL还提供了其它的一些辅助功能,如从口令生成密钥的API,证书签发和管理中的配置文件机制等等。如果你有足够的耐心,将会在深入使用OpenSSL的过程慢慢发现很多这样的小功能,让你不断有新的惊喜。
‘贰’ 如何强制https使用指定的算法
SCHANNEL\Protocols 子项
协议 的注册表项下 SCHANNEL 键用于的控件使用的协议支持由 Schannel.dll 文件,并限制该协议使用 TLS 服务器或 TLS 的客户端。
若要禁止使用的 SSL 3.0 或 TLS 1.0 之外的其他协议,请将 Enabled 值的 DWORD 鍊兼暟鎹改为 0x0 中下面的注册表项,在 协议 键下的每个:
SCHANNEL\Protocols\PCT 1.0\Client
SCHANNEL\Protocols\PCT 1.0\Server
SCHANNEL\Protocols\SSL 2.0\Client
SCHANNEL\Protocols\SSL 2.0\Server
目前的 Microsoft 消息队列使用的客户端和服务器之间只有 PCT 1.0
SCHANNEL\Ciphers 子项
密码 的注册表项下 SCHANNEL 键用于控制如 DES 或 RC4 对称算法的使用。 以下是在 密码 键下的有效注册表项。
SCHANNEL\Ciphers\RC4 128/128 子项:
rc4 128/128
此子项是指 128 位 RC4。
要允许此密码算法、 0xffffffff 到更改 启用 值的 DWORD 值数据,否则更改为 0x0 的 DWORD 值数据。 如果不配置 启用 值,启用了默认值。 此注册表项不能应用于不具备 SGC 证书
---------------------------------------------------------------------------------------
des:有好几种:0xffffffff 到更改 启用,否则更改为 0x0 ,不配置 启用 值,启用了默认值,但有很多不允许禁用的算法。。。
TLS 1.0 和SSL 3.0 :{}是要在regedit里建的值:
ssl_rsa_export_with_rc4_40_md5 {0x00,0x03}
ssl_rsa_with_rc4_128_md5 {0x00,0x04}
SSL_RSA_WITH_DES_CBC_SHA {0x00,0x09}
ssl_rsa_with_3des_ede_cbc_sha {0x00,0x0A}
ssl_rsa_export1024_with_des_cbc_sha {0x00,0x62}
ssl_rsa_export1024_with_rc4_56_sha {0x00,0x64}
TLS_RSA_WITH_DES_CBC_SHA {0x00,0x09}
tls_rsa_with_3des_ede_cbc_sha {0x00,0x0A}
tls_rsa_export1024_with_des_cbc_sha {0x00,0x62
tls_rsa_export_with_rc4_40_md5
{0x00,0x03}
tls_rsa_with_rc4_128_md5 {0x00,0x04}
1
。。。。SCHANNEL\Ciphers\Triple DES 128/128 子项:
三重 DES 168/168
2
。。。。SCHANNEL\Ciphers\RC2 56/56 子项:
DES 56/56
3
SCHANNEL\Hashes\MD5 子项:
md5
=====
例子:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA]
"Enabled"=dword:ffffffff
‘叁’ 在程序里禁用了 Nagle 算法还会出现 200ms 延迟么
那两条日志确实是在 rlen, err := rd.Read(rbuf[:]) 的前后,但是这个 read 接口只调用一次 reader 的 read,产生延迟应该不是需要填满 buf 引发的。
// Read reads data into p.
// It returns the number of bytes read into p.
// It calls Read at most once on the underlying Reader,
// hence n may be less than len(p).
// At EOF, the count will be zero and err will be io.EOF.
func (b *Reader) Read(p []byte) (n int, err error) {
...
}
‘肆’ win10关闭nagle算法的缺点
缺点:导致某些在线操作延迟过高,进而导致网游卡顿。
Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。
算法
TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。
‘伍’ 路由算法的启用与停用 ,比如rip停掉,而改用ospf,
先启用ospf,
router ospf 1
network + 所要宣告的网络地址
网络收敛以后在全局模式下:
no router rip 就把rip关掉了
‘陆’ 怎么在服务器端禁止使用rc4加密算法
.版本 2.子程序 加密为rc4, 文本型, 公开, 用RC4算法对文本进行加密.参数 加密的数据, 文本型, , 欲加密的文本.参数 加密密钥, 文本型, 可空, 用作加密的密码.局部变量 临时, 字节集.局部变量 s, 字节型, , "256".局部变量 k, 字节型, , "256"....
‘柒’ ssl安全 怎么禁用RC4加密算法
SCHANNEL\Protocols 子项
协议 的注册表项下 SCHANNEL
键用于的控件使用的协议支持由 Schannel.dll 文件,并限制该协议使用 TLS 服务器或 TLS 的客户端。
若要禁止使用的 SSL
3.0 或 TLS 1.0 之外的其他协议,请将 Enabled 值的 DWORD 鍊兼暟鎹改为 0x0 中下面的注册表项,在 协议 键下的每个:
目前的 Microsoft 消息队列使用的客户端和服务器之间只有 PCT 1.0
SCHANNEL\Ciphers 子项
密码 的注册表项下 SCHANNEL 键用于控制如 DES 或 RC4
对称算法的使用。 以下是在 密码 键下的有效注册表项。
SCHANNEL\Ciphers\RC4
128/128 子项:
rc4 128/128
此子项是指 128 位 RC4。
要允许此密码算法、 0xffffffff 到更改
启用 值的 DWORD 值数据,否则更改为 0x0 的 DWORD
值数据。 如果不配置 启用 值,启用了默认值。 此注册表项不能应用于不具备 SGC
证书
---------------------------------------------------------------------------------------
des:有好几种:0xffffffff 到更改 启用,否则更改为 0x0 ,不配置 启用
值,启用了默认值,但有很多不允许禁用的算法。。。
TLS 1.0 和SSL 3.0
:{}是要在regedit里建的值:
ssl_rsa_export_with_rc4_40_md5
{0x00,0x03}
ssl_rsa_with_rc4_128_md5
{0x00,0x04}
SSL_RSA_WITH_DES_CBC_SHA
{0x00,0x09}
ssl_rsa_with_3des_ede_cbc_sha
{0x00,0x0A}
ssl_rsa_export1024_with_des_cbc_sha
{0x00,0x62}
ssl_rsa_export1024_with_rc4_56_sha
{0x00,0x64}
TLS_RSA_WITH_DES_CBC_SHA
{0x00,0x09}
tls_rsa_with_3des_ede_cbc_sha
{0x00,0x0A}
tls_rsa_export1024_with_des_cbc_sha
{0x00,0x62
tls_rsa_export_with_rc4_40_md5
{0x00,0x03}
tls_rsa_with_rc4_128_md5
{0x00,0x04}
1
。。。。SCHANNEL\Ciphers\Triple
DES 128/128 子项:
三重 DES 168/168
2
。。。。SCHANNEL\Ciphers\RC2 56/56
子项:
DES 56/56
3
SCHANNEL\Hashes\MD5
子项:
md5
=====
例子:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\MD5]
"Enabled"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Hashes\SHA]
"Enabled"=dword:ffffffff
SCHANNEL\Protocols\PCT 1.0\Client
SCHANNEL\Protocols\PCT 1.0\Server
SCHANNEL\Protocols\SSL 2.0\Client
SCHANNEL\Protocols\SSL 2.0\Server
‘捌’ 求算法的功能
这个算法是求一个数组的和,这个数组有n个元素,这个数组的定义是a(n)=n!,我这个数组的求和s(n)=1!+2!+……+n!,我这个算法或者这个函数的功能就是求s=s(n)。