toDerInputStream rejects tag type 77

前一段时间有遇到一个很古老的关于证书的报错(toDerInputStream rejects tag type 77),异常罕见,这里有一些信息可以分享给大家。
原网站链接好像已经失效了(https://developer.salesforce.com/forums/?id=906F0000000904dIAA)
信息如下:

Yes, we solved this issue. I think the exception message is kind of misleading.

Basically, it looks like Salesforce doesn't support DER/PEM certificates and it can accept only PKCS#12 as it can contian both the certificate (and the intermediate certificates and signer certificate) and the private key in a standardized manner. Check if you are using the PEM/DER; if it is, try to export the certificate in PKCS#12 format.

In my case, the issue was little different. I did exported as PKCS#12 from IBM WebSphere Cast Iron, but I extracted only the private key from the .PFX file and embedded into the code. With the help of Salesforce support, we found that we had to base64 encode the entire certificate and embed it into the code. The process works like this:

1. Import the signed certificate into Windows Certificates MMC

2. Export this certificate by right clicking the certificate->All Tasks->Export.

3. Click 'Next' and choose 'Yes, export the private key'.

4. Click 'Next' and choose 'Personal Information Exchange - PKCS # 12 (.PFX) option. Make sure you uncheck all the sub options.

5. Enter the password and the Confirm password and click 'Next'.

6. Specify the file name and click 'Next' and click 'Finish'.

7. Install the windows distribution of openssl (http://www.slproweb.com/products/Win32OpenSSL.html) and install in your workstation.

8. Create a folder 'myca' and copy the file that you created in the last step.

9. Open a command prompt and navigate to this folder and run the following commands from the command prompt

a. set OPENSSL_CONF=c:\openssl-win32\bin\openssl.cfg (change the path if necessary)

b. set PATH=%PATH%;C:\openssl-win32\bin

c. openssl

d. base64 -in <input file name> -out <output file name>.

10. Open the output file in any text editor and copy the encoded text and embed into your code.

This fixed the issue in my case. Note that this is required only if you use the legacy method of using the certificates generated from the CSR that you created outside of Salesforce. Salesforce recommends to generate the CSR from them itself (Setup->Security Controls->Certificate and Key Management). This way, the private key is not shared outside of the salesforce.

Regards,

Hari Krishnan.

翻译为中文如下:

是的,我们解决了这个问题。我认为异常信息有点误导人。

基本上,看起来Salesforce不支持DER/PEM证书,它只能接受PKCS#12,因为它可以以标准化的方式包含证书(和中间证书和签发者证书)以及私钥。检查一下你是否在使用PEM/DER;如果是的话,尝试以PKCS#12格式导出证书。

在我的情况下,问题有点不同。我从IBM WebSphere Cast Iron中导出为PKCS#12,但我只从.PFX文件中提取了私钥并嵌入到了代码中。在Salesforce的帮助下,我们发现我们必须对整个证书进行base64编码并嵌入到代码中。流程如下:

将签名证书导入Windows证书MMC。

通过右键单击证书->所有任务->导出来导出此证书。

点击“下一步”,选择“是,导出私钥”。

点击“下一步”,选择“个人信息交换 - PKCS # 12 (.PFX)”选项。确保取消选中所有子选项。

输入密码和确认密码,然后点击“下一步”。

指定文件名,然后点击“下一步”,再点击“完成”。

安装Windows版本的openssl(http://www.slproweb.com/products/Win32OpenSSL.html)并在您的工作站上安装。

创建一个名为'myca'的文件夹,并复制您在上一步创建的文件。

打开命令提示符并导航到此文件夹,然后从命令提示符运行以下命令

a. set OPENSSL_CONF=c:\openssl-win32\bin\openssl.cfg(如果需要,更改路径)

b. set PATH=%PATH%;C:\openssl-win32\bin

c. openssl

d. base64 -in <输入文件名> -out <输出文件名>

在任何文本编辑器中打开输出文件,并复制编码文本并嵌入到您的代码中。

在我的情况下,这解决了问题。请注意,只有在您使用从Salesforce之外创建的CSR生成的证书的传统方法时才需要这样做。Salesforce建议从他们自己那里生成CSR(设置->安全控件->证书和密钥管理)。这样,私钥就不会在Salesforce之外共享。

致意,

Hari Krishnan.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Successive rejects算法是一种用于选择最优解的算法。该算法的基本思想是在一组候选解中,先选出一个最优解,然后从剩余的候选解中再选出一个最优解,依此类推,直到选出最后一个最优解或者达到某个停止条件。在每次选择最优解时,将其他不符合要求的候选解剔除,直到只剩下最优解和剩余的候选解。这个过程可以看作是一种逐步剔除的过程,因此称为Successive rejects算法。 ### 回答2: Successive Rejects算法,也称为连续拒绝算法,是一种用于集合选择问题的贪心算法。 该算法的目标是在一个候选集合中选择出一组互斥的子集合,使得这些子集合之间的并集与候选集合相同,且互斥子集合之间的重叠最小。 算法步骤如下:首先,对候选集合进行排序,按照某个指标进行排列,比如权重或者得分。然后,从排好序的候选集合中选出一个具有最小指标值的子集合,并将其加入已选择子集中。接着,对于剩余的候选集合中的每个子集合,检查其与已选择子集的互斥程度。如果两个子集合之间的互斥程度较小,则将该子集合加入已选择子集。最后,重复该过程,直到所有的子集合都被加入已选择子集。 这个算法的关键是在每一轮选择时,根据互斥程度进行判断。通过按照最小指标值的顺序选择子集合,可以保证每次选择的子集合都是最有可能与已选择子集互斥程度较小的,从而减小了重叠程度。 同时,该算法还具有较高的效率,因为在每一轮选择时,只需要比较当前子集合与已选择子集的互斥程度,而不需要遍历所有候选集合。 总之,Successive Rejects算法是一种用于集合选择问题的贪心算法,通过连续拒绝的方式选择互斥子集合,使得它们之间的重叠程度最小。它能够在保证一定的效率的前提下,选择出最佳的子集合。 ### 回答3: Successive Rejects(连续拒绝)算法是一种用于解决分配问题(allocation problems)的算法。它主要用于按照一定规则将有限资源分配给多个参与者的问题。 该算法的基本思想是不断地根据预设的规则进行筛选和淘汰,直到最终找到最佳的资源分配方案。 首先,假设有一个有限的资源池和一组多个参与者,每个参与者都希望从资源池中获得尽可能多的资源。然而,由于资源的有限性,只有一部分参与者可以成功获得资源。 Successive Rejects算法的步骤如下: 1. 将所有的参与者按照某个预先确定的规则进行排序。 2. 设置一个阈值,初始值为0。 3. 依次遍历排序后的参与者。 4. 对于每个参与者,计算其在当前阈值下能够获得的资源数量。 5. 如果该参与者能够获得的资源数量小于其需求量,则将其淘汰,并将阈值增加到可以满足下一个参与者需求的程度。 6. 如果该参与者能够获得资源数量大于等于其需求量,则分配资源给该参与者,并将其从参与者列表中删除。 7. 重复步骤4-6,直到所有参与者都被淘汰或分配完资源。 通过这种方式,Successive Rejects算法在保障资源分配高效性的同时,也可以确保资源能够以合理的方式分配给需求量大的参与者,从而达到最佳分配方案。 总之,Successive Rejects算法是一种通过不断淘汰和分配的方式,实现资源分配的算法。它的核心思想是根据预设规则,通过连续的拒绝或接受,找到最佳的资源分配方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值