軟實現非對稱加解密,公鑰證書與公鑰值區別,包含提取公約值程式碼
阿新 • • 發佈:2018-11-17
目前有部分未採購簽名驗籤伺服器的企業,採用軟實現做非對稱、對稱加解密,本文簡略說明一下工作過程中遇到的問題。
本交易涉及傳送方,接收方
問題背景:
對方即接收方採用的是軟實現,並且只提供了公鑰值(未經CA簽發)
我方即傳送方,採用的是硬體簽名驗籤服務。伺服器中存有我方的私鑰,以及加密公鑰;對方提供的是公鑰值,無法匯入到簽名驗籤伺服器(會驗根證書)
需求
對傳輸的json串進行簽名。
問題:對方無法通過base64編碼的公鑰證書驗證簽名,報錯資訊為:data isn’t an object(tag=-96),
初步定位到是公鑰證書問題,根據對方軟實現程式碼,可能是對方無法提取公鑰值造成。經過提取後的公鑰值傳送給對方之後,驗簽完成,這裡提供提取公鑰值
public static String getPublickeyFromCert( String fileName ) { FileInputStream in = null; X509Certificate x509 = null; try { in = new FileInputStream( fileName ); byte[] bs = new byte[ in.available() ] ; in.read( bs ) ; x509 = NetSignAgent.generateCertificate( bs ) ; return Base64.encode( x509.getPublicKey().getEncoded() ); } catch (Exception e) { e.printStackTrace(); return null; }finally{ if ( in != null ) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
公鑰證書裡包含使用者資訊、證書版本等資訊,驗籤時會對證書鏈進行驗證;公鑰值僅僅是一串編碼數值,不能作為真正的PKI體系一員,因為公私鑰對一個軟體就能生成,而且完全暴露在外,可以被隨便替換,並且驗籤時,無可信任第三方CA。