第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

由于 XML 屬性順序更改而導(dǎo)致數(shù)字簽名損壞

由于 XML 屬性順序更改而導(dǎo)致數(shù)字簽名損壞

PIPIONE 2023-08-09 15:48:05
我正在用 Java 開發(fā)一個 SOAP Web 服務(wù)器,其中我的響應(yīng)必須帶有時間戳和簽名。要簽名的節(jié)點是 BODY 和 TIMESTAMP。問題在于,XmlSignature.sign方法對這些節(jié)點進行解組,將命名空間屬性放置在 BODY 和 TIMESTAMP 標(biāo)記中的 Id 屬性之前,而由 JAX-WS 解組的出站響應(yīng)字符串將命名空間屬性放置在Id之后。因此,這些節(jié)點計算出的摘要值對記錄器無效,即:Actual Digest: ljf4iIFTgpHUDKtLjYJEto9Ro5k=Expected Digest: iIYWShXDG4o8f/9L08d+apVsGx0=我認(rèn)為如果我可以指定解組器的屬性順序(在簽名或響應(yīng)消息中),我也可以使順序匹配,但我還沒有做到這一點。我測試了 SOAPHandler 來攔截響應(yīng),但我發(fā)現(xiàn)無法更改消息屬性順序。這是由簽名類生成的節(jié)點時間戳的 XML 代碼:            <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="TS-1000">                <wsu:Created>2019-09-19T10:00:00.000Z</wsu:Created>                <wsu:Expires>2019-09-19T10:05:00.000Z</wsu:Expires>            </wsu:Timestamp>這是響應(yīng)中發(fā)送的 TIMESTAMP 節(jié)點的 XML 代碼:            <wsu:Timestamp wsu:Id="TS-1000" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">                <wsu:Created>2019-09-19T10:00:00.000Z</wsu:Created>                <wsu:Expires>2019-09-19T10:05:00.000Z</wsu:Expires>            </wsu:Timestamp>BODY 節(jié)點也是如此。簽名:        <S:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Body-1000">            <AsignacionNotarioResponse xmlns="http://ancert.notariado.org/XML">                <CodigoRespuesta>0</CodigoRespuesta>                <IdNotificacionCGN>371003</IdNotificacionCGN>            </AsignacionNotarioResponse>        </S:Body>發(fā)送:        <S:Body wsu:Id="Body-1000" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">            <AsignacionNotarioResponse xmlns="http://ancert.notariado.org/XML">                <CodigoRespuesta>0</CodigoRespuesta>                <IdNotificacionCGN>371003</IdNotificacionCGN>            </AsignacionNotarioResponse>        </S:Body>
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經(jīng)驗 獲得超8個贊

經(jīng)過幾天的努力,我終于找到了問題所在。


為了對正文進行簽名,我必須為標(biāo)簽分配一個 ID,以及在 tar 下對此 ID 的引用。


所以我的 XML 看起來像這樣:


...


之后,我用我的私鑰簽署了傳出消息。


這是我將 Id 屬性添加到 Body 標(biāo)記的函數(shù):


/**

 * Asigna un identificador único al nodo Body del mensaje.

 * 

 * @param soapMessage                       Mensaje SOAP

 * 

 * @throws SOAPException

 */

private static void asignarIdNodoBody(SOAPMessage soapMessage) throws SOAPException {

    String idBody = "Body-123456";

    SOAPBody soapBody = soapMessage.getSOAPBody();

    soapBody.setAttributeNS(NAMESPACE_WSU, "wsu:Id", id_body);

}

由于某種我不明白的奇怪原因,上面的代碼導(dǎo)致添加的數(shù)字簽名沒有通過驗證。


我用這個函數(shù)替換了上面的函數(shù):


/**

 * Asigna un identificador único al nodo Body del mensaje.

 * 

 * @param soapMessage                       Mensaje SOAP

 * 

 * @throws SOAPException

 */

private static void asignarIdNodoBody(SOAPMessage soapMessage) throws SOAPException {

    String idBody = "Body-123456";

    SOAPBody soapBody = soapMessage.getSOAPBody();

    SOAPEnvelope soapEnvelope = soapMessage.getSOAPPart().getEnvelope();

    Name name = soapEnvelope.createName("Id", "wsu", NAMESPACE_WSU);


    soapBody.addAttribute(name, id_body);

}

瞧!我之后添加了數(shù)字簽名,現(xiàn)在它通過了驗證。


Referencia [0] 

    URI:              #Body-123456

    Validacion OK:    true 

    Digest:           JMdmg+d/yJJA1wg7yzDctIBE9z4= 

    Expected digest:  JMdmg+d/yJJA1wg7yzDctIBE9z4= 

Referencia [1] 

    URI:              #TS-1000 

    Validacion OK:    true 

    Digest:           sEY89etI7c+uGrFPh7W59nu/4ac= 

    Expected digest:  sEY89etI7c+uGrFPh7W59nu/4ac=


查看完整回答
反對 回復(fù) 2023-08-09
  • 1 回答
  • 0 關(guān)注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號