【问题标题】:OpenSSL - Neither PUB key nor PRIV key:: nested asn1 errorOpenSSL - 既不是 PUB 密钥也不是 PRIV 密钥:: 嵌套 asn1 错误
【发布时间】:2013-01-01 17:08:19
【问题描述】:

我正在尝试使用公钥初始化 OpenSSL::PKey::RSA,但它不起作用。

以下是密钥对:

-----BEGIN RSA PRIVATE KEY-----
MIIBOwIBAAJBALbkpbDFbZ54bM5ybwwdCqsUHjxWQF4B0Q1sAOBFEYdpxZJZ8dAz
ycPzIgSlPc8yqjeqwJQtvCpktrntALpX1ksCAwEAAQJAYT0XyvBs48BrOSgmWm5m
aab8nF/PQSv+FgDCRnryYue3WZOpUqITB0w6ivC68G/+Mf6IXyE4ljqw2iIAdjyv
YQIhAOE20o2bLPMtziEOdH0KGpN0gNYpe38jGyvGw7k5gZd9AiEAz+TWZRJpc9yX
5dew3xcBtIhaTPFmVLgmfU7FwIWW32cCIQCvKK9LmUO1gouN5CsvUNtokbTeW/cD
467vNjDlb1deFQIhAK55pZ1p2GrOpgTWArEYg+vZy79rkbBkZJkh9UFgXIDdAiBm
Rglcmt9cD2Vqg7xMr7cP3FJbSmJffSwYve1fazuZOw==
-----END RSA PRIVATE KEY-----

-----BEGIN PUBLIC KEY-----
MEoCAQACQLbkpbDFbZ54bM5ybwwdCqsUHjxWQF4B0Q1sAOBFEYdpxZJZ8dAzycPz
IgSlPc8yqjeqwJQtvCpktrntALpX1ksCAwEAAQ==
-----END PUBLIC KEY-----

OpenSSL::PKey::RSA.new(private_key) # WORKS!
OpenSSL::PKey::RSA.new(public_key) # FAILS!
OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key:: nested asn1 error
    from (irb):16:in `initialize'
    from (irb):16:in `new'
    from (irb):16
    from /Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start'
    from /Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start'
    from /Users/dhracker/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

another_public_key = OpenSSL::PKey::RSA.new(512).public_key
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMS6XZD2NHTCwdgT+A2/PkStyJwYX/Qu
mfCyZc5TE5IZYaKsBg4uGcI97r8lxEv6rx5b0b6cIwQ7A7e6CUVph5MCAwEAAQ==
-----END PUBLIC KEY-----
OpenSSL::PKey::RSA.new(another_public_key) # WORKS!

导致事情失败的 public_key 有什么问题?

【问题讨论】:

  • 您使用什么来生成密钥对?
  • 现在整个互联网都知道你的私钥,我建议你创建一个新的。您不会在问题中发布您的密码吗?

标签: ruby openssl rsa


【解决方案1】:

看起来你所拥有的应该只有公钥本身无效。也许您在某些时候通过意外添加或删除额外的字符来破坏它们。你可以测试这个密钥,应该会看到它的工作原理

public_key = "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEAoxi2V0bSKqAqUtoQHxWkOPnErCS541r6/MOSHmKOd6VSNHoBbnas\nZRQSDUTbffB6C++DbmBCOHmvzYORD0ZWYgyMcgbYJD48Z2fe0nm+WMYN5u8DPnTP\nvf8b/rJBxGF0dsaoFAWlB81tTnKFCxAbCSgfmQt+Vd4qupGZ5gGu9uoKlaPjmYuA\nIxIjUMcu3dov7PQ+PZIvdkM0fiz8YIl8zo+iWWyI2s6/XLoZJ4bYs2YJHZDf6biU\nsZhs8xqh/F6qlcRt3Ta25KMa0TB9zE3HHmqA/EJHFubWFRCrQqpboB0+nwCbmZUl\nhaxA79FRvYtORvFAoncoFD4tq3rGXcUQQwIDAQAB\n-----END RSA PUBLIC KEY-----\n"

OpenSSL::PKey::RSA.new(public_key)

我首先运行 linux 命令生成我的密钥以生成 openSSH 密钥对

$  ssh-keygen -t rsa -b 1024

然后,我将 OpenSSH 样式的公钥转换为 OpenSSL 样式的密钥(PEM 格式),并将其存储在一个名为“pem”的文件中。

$  ssh-keygen -f testing_rsa.pub  -e -m pem > pem

【讨论】:

    【解决方案2】:

    点击此链接http://skim.la/2012/01/16/rsa-public-key-interoperability-between-ruby-and-android/,我通过这种方式获得了更多成功。

    require 'openssl'
    require 'base64'
    
    public_key = "MIIBCgKCAQEA20O377QEiZvPsj14LKl2xO23iirJB5WDTVjeab1cIOJu1vbV+Pdwl1Bov8m896ZG4K0S/qvfJcdHLovr2WJ+o2maK1XZCNy8lA" +
      "zIPzZrj/yDZAB2GSjR3in1lQRQPtWjIOdB8Cy2FGybEstIkpf8MD3XMWp5g8BtdOv43ekjBuTiGGLlPRG0+IiazjHlWjyl6DU9x9m2Jxks0H6YZud6zf4s9Q6" +
      "9vPUYgOZXWs7IghxqrVGE5mWxoRudsDFhLYP706+IrSxGOf5fE0/8fjtzj/eJayCLmkUWq/xsts5tBAbwsX5xKdk8iD0OU2qOEbVuiYmehEiJnvO2vyd+t76C" +
      "xwIDAQAB"
    
    rsa_public_key = OpenSSL::PKey::RSA.new(Base64.decode64(public_key))
    

    【讨论】:

    • 如何在测试中使用?创建一个假密钥,如何去做?
    【解决方案3】:

    我遇到了同样的问题,我尝试了互联网上提供的许多不同的解决方案。 但实际问题在于我提供的key。 密钥的格式应该是正确的。不应有任何多余的字符或\n , \t

    我希望这对你有帮助。所以,请再次检查您的密钥。

    【讨论】:

      【解决方案4】:

      同一天我遇到了同样的问题,更改密码可能会对您有所帮助。因此,请验证您的密码并在通知类中更改它。我希望这可能对您有所帮助。

      我已更改文件app/jobs/notification_job.rb

      certificate: Rails.root.join('Your Pem File Name Goes Here'),# required
                      passphrase:  "PASSPHRASE GOES HERE",              # optional
                      gateway:     "gateway.push.apple.com", # optional; See note below.
                      # gateway:     "gateway.sandbox.push.apple.com", # optional; See note below.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 2017-02-15
        • 1970-01-01
        • 1970-01-01
        • 2017-10-11
        • 2020-06-25
        相关资源
        最近更新 更多