- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试通过以下方式提交 CSR 请求:
require 'openssl'
require 'json'
def public_key_info
key_info = private_key.public_key.to_pem
key_info = key_info.sub! '-----BEGIN PUBLIC KEY-----', '-----BEGIN CERTIFICATE REQUEST-----'
key_info = key_info.sub! '-----END PUBLIC KEY-----', '-----END CERTIFICATE REQUEST-----'
key_info
end
# "Creating a new 2048bit RSA Keypair..."
def private_key
@private_key = OpenSSL::PKey::RSA.new 2048
end
payload = {
"CsrData" => public_key_info,
"certTemplate" => "MyTemplate"
}
encoded = JSON.generate(payload)
p "Payload is #{encoded}"
response = RestClient::Resource.new(
'http://myURL/GenerateCertificateUsingCsr',
).post encoded, :content_type => 'application/json', :accept => 'text/plain'
response_json = JSON.parse(response.body)
p response_json
请求失败,出现错误提交失败:错误解析请求。符合 ASN1 错误标记值。 0x8009310b(ASN:267 CRYPT_E_ASN1_BADTAG):
{
"certTemplate":"MyTemplate",
"CsrData":"-----BEGIN CERTIFICATE REQUEST-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWeK196VcjZZFbKyEjpj\n8I6DjHbwiMi9I10tV41OEt9Ozp+M0V6TYOKNlJTXGxNUHD0lXFJBlS2z/PLQbW/3\n6C9xRkIclve5Uq8J2NmubnR9+NOt/cjPb4EJtMlxySq5cWOqEyq4UirUEfch9HMC\nkLwJ0MPdrDatZqfIv1IvhBiKfyqWV2jds3X60NlmvyGxnrd54dO8/OqNJNmw2BP9\n3aa21asRqB7oPW2H49o2gwDxF6ZEwymAFvU4jvO+BQLRDYTm8GslHyX9kCXWnYHg\nX7gqvek/mu7KqyIB44YyOjGYkVX76El32B08ruKlc+xZ8kFWC1bMzwZNoFEBKO6D\n9QIDAQAB\n-----END CERTIFICATE REQUEST-----"
}
{"ErrorCode"=>1005, "ErrorMessage"=>"The submission failed: Error Parsing Request ASN1 bad tag value met. 0x8009310b (ASN: 267 CRYPT_E_ASN1_BADTAG)", "Return"=>false, "p12Data"=>nil, "certexpdate"=>nil, "serialNo"=>nil}
=> true
但是如果我从命令行创建 CSR 请求:
openssl req -out mytest.csr -new -newkey rsa:2048 -nodes -keyout mytest.key
然后转换 CSR,用 \n
字符串替换新行。
然后准备一个Json payload:
{
"certTemplate":"MyTemplate",
"CsrData":"-----BEGIN CERTIFICATE REQUEST-----\nMIIC8zCCAdsCAQAwgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJNRDEWMBQGA1UE\nBwwNU2lsdmVyIFNwcmluZzELMAkGA1UECgwCRVMxCzAJBgNVBAsMAk1MMSAwHgYD\nVQQDDBcgbXNjbGllbnQ1MS5zYW10ZXN0LmNvbTElMCMGCSqGSIb3DQEJARYWbXNj\nbGllbnQ1MUBzYW10ZXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAL+X4YJ041JDVfYZr2IXHEAsBc9cbtYxuLa4FkXz+enZYj+9J4qK7zl9OJ7P\nfW29jf82oyQ83RH6XrYcFJKO9cuXgkkQaNV8X6J7sbn87hHUn8xZ1SORd+OPV/ws\nHdOuuv/kQi0S1Rz9Qn7RJiEnQqC14bp50fjJDxxYBVcU/bevlMuFzf8pKQbNfWD5\nbpHHPKpN6uKAXQa2vCqRPAHMvlxCqVHf1Lmy6xojsHGDdqYcYgwG2JB140nOpKtA\nwO9jR5wF7HmqUs/u/fV+p86IaHt6rAxo8WX0Ymu+48DanMdlBqjQ222OthnTbgmD\nbW9j16kNesriu8APSpxW6f7InhsCAwEAAaAYMBYGCSqGSIb3DQEJAjEJDAdNTF9U\nVjJHMA0GCSqGSIb3DQEBCwUAA4IBAQCOxISJbXXQqFmHTwcIP+jaYM1souuptE5l\nhrG/5T1Irz357DABfQpaZkon8dIF8QRpjCY2+b44srGtbKBbnUDAgM5e+qqZjx6X\ng7Yp7LLVW9EplvMYT83M62K9UyNFqjizgXbNIxJRsApLutLBpTpB3vIpQcZYhygf\nfJx/zmN3rD3K47SdaDd9JyD7W3tnAQ1rHEG1uS+Pm9Cq5+Wi8k+nEeGHtQnY5eps\nYqA/g86m4VR5RP0+oTvq3FC57PFqrbv+lwD9brCzjAK/c/QcyBnoxnMNbFVzwhcf\nKAF82Vl9kvwOwyD8sPN19V9ldmZpMhQ/2hsuHxRLAnlwHYhqfl/9\n-----END CERTIFICATE REQUEST-----"
}
上述 CSR 请求工作正常。
我上面的 ruby 代码哪里做错了?
最佳答案
那是因为 CSR 请求不是 pem 格式的公钥。与公钥相比,CSR 具有不同的 ASN1 表示法。这就是您收到 ASN1 相关错误的原因。
可以看到this gist关于如何使用 OpenSSL 的 Ruby 包装器创建 CSR。如您所见,您还需要指定专有名称。
def csr(key)
options = {
:country => 'PL',
:state => 'M',
:city => 'Cracow',
:organization => 'OSPL',
:department => '',
:common_name => 'OSPL',
:email => ''
}
request = OpenSSL::X509::Request.new
request.version = 0
request.subject = OpenSSL::X509::Name.new([
['C', options[:country], OpenSSL::ASN1::PRINTABLESTRING],
['ST', options[:state], OpenSSL::ASN1::PRINTABLESTRING],
['L', options[:city], OpenSSL::ASN1::PRINTABLESTRING],
['O', options[:organization], OpenSSL::ASN1::UTF8STRING],
['OU', options[:department], OpenSSL::ASN1::UTF8STRING],
['CN', options[:common_name], OpenSSL::ASN1::UTF8STRING],
['emailAddress', options[:email], OpenSSL::ASN1::UTF8STRING]
])
request.public_key = key.public_key
request.sign(key, OpenSSL::Digest::SHA1.new)
end
关于ruby-on-rails - CSR 失败 : Error Parsing Request ASN1 bad tag value met (ASN: 267 CRYPT_E_ASN1_BADTAG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37868584/
我需要得到一个结果集,其中包含满足特定条件的行,但也包括不满足主要条件但链接到满足这些条件的行的行。我知道这听起来可能很复杂和不清楚,所以我将这个任务转化为一个简单的例子。 +------------
这可能会令人困惑。 rootdir= C:\User\Desktop\File file = 'file.txt' mainLocNum = str(list(rootdir)).count(r'\\
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我想读取一些 .sdf 文件(实际上是 .mdl 文件,但当我下载它们时它们显示为 .sdf),以便制作一个程序将它们更改为另一种格式。 .sdf 文件模拟分子,但这与那里无关。 我想阅读忘记债券的坐
我有一个来自 Oracle 的数据集,但 E 列中的许多记录缺少 GEO 数据(AMER、EMEA、APAC),而是显示“-”。我正在使用 VB 格式化和处理这些数据,除了这一部分之外,我一切正常。
我知道错误使用 linq 可能会导致性能下降,但这一次太奇怪了。 当我调用“AsParallel.TakeWhile.AsParallel.ForAll”时,它比“AsParallel.TakeWhi
我正在构建的网页存在一些问题。代码粘贴在下面,但您也可以在这里查看:www.petermingione.com/Webcast2/ 当页面在移动设备上加载时,页面被放大,我必须捏合才能将缩放比例调整到
我正在开发一个 C# Winforms 应用程序,应用程序的一部分将使用 AsyncUpload 将文件上传到网络服务器(使用它,由于需要使用 porgress 回调),在 C# 程序中 我有一个调用
我正在使用 Vuejs2 和 vee-validate 进行表单验证。这是一个很棒的包,但我正在努力实现条件必填字段。 选择一个特定的 radio 选项时,我希望需要两个选择字段。当未选择该 radi
我有一个标准的StreamBuilder。从 Firestore 返回一个列表工作正常,但是我想在查询为空时返回一个小部件。为此,我使用条件 (!snapshot.hasData)。但是当集合为空时,
我的POJO如下 class EventUser { private id; private userId; private eventId; } 我检索 EventUser 对象如下:
我正在我的图形数据库中进行求和运算:我比较了几个节点,计算了一个数字来表示图形的某些区域的相似程度,如果该数字足够大,我想在节点之间创建一个关系。 我有一个查询可以完成所有这些,除了检查数字是否足够大
有一个步骤卡住了,更新数据库中的库存编号(“D”列) 更新是基于项目的名称(nama barang),所以如果form_penerimaan中的项目名称(列“C”)与数据库中的项目名称(列“B”)_g
ggplot内有过滤方法吗本身?也就是说,说我想这样做 p % filter(Species == "setosa"), colour = "red") + geom_point(data
我有这些路线: $routeProvider.when('/events/agenda', {...}); $routeProvider.when('/events/calendar', {...})
我有一个以下格式的数据框: +----------+-------+----------+---------+-----------------------+---------+---------+
我为 CTF 游戏编写了一个异步暴力破解脚本,如下所示 async def bound_fetch(sem, session, answer): # generating url, head
我的数据框如下所示: time price direction event High_cross movement_up triggered
我是 MySQL 的新手,希望有人能帮助我。 我目前将以下内容用作 PHP 中较长语句的一部分,以便将某些内容写入按预期工作的数据库表: $stmt = $conn->prepare("INSERT
考虑以下程序: // Compilation: // gcc -Wall -Wextra -pedantic -Wno-unused-parameter -O3 test.c -o test -pth
我是一名优秀的程序员,十分优秀!