`

基于verisign实现wss例子全部类

阅读更多

基于tsik.jar,ISNetworksProvider.jar,ws-security.jar可以到csdn的down下载
package wss;
import org.w3c.dom.Document;
import javax.xml.soap.SOAPMessage;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import java.io.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.soap.MimeHeaders;
import javax.xml.transform.stream.StreamResult;
import javax.xml.soap.MessageFactory;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
public class MessageConverter {
  public static SOAPMessage convertDocumentToSOAPMessage(Document doc)
    throws Exception {
   TransformerFactory transformerFactory = TransformerFactory
     .newInstance();
   Transformer transformer = transformerFactory.newTransformer();

   ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
   transformer.transform(new DOMSource(doc), new StreamResult(
     byteArrayOutputStream));
   MimeHeaders header = new MimeHeaders();
   header.addHeader("Content-Type", "text/xml");
   MessageFactory factory = MessageFactory.newInstance();
   SOAPMessage soapMsg = factory.createMessage(header,
     new ByteArrayInputStream(byteArrayOutputStream.toByteArray(),
       0, byteArrayOutputStream.size()));

   return soapMsg;
  }

  /**
   * SOAPMessage转换成Document
   */
  public static Document convertSoapMessageToDocument(SOAPMessage soapMsg)
    throws Exception {
   ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
   soapMsg.writeTo(byteArrayOutputStream);
   ByteArrayInputStream bais = new ByteArrayInputStream(
     byteArrayOutputStream.toByteArray(), 0, byteArrayOutputStream
       .size());

   DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
     .newInstance();
   documentBuilderFactory.setNamespaceAware(true);
   DocumentBuilder documentBuilder = documentBuilderFactory
     .newDocumentBuilder();
   Document doc = documentBuilder.parse(bais);
   return doc;
  }

}

 


package wss;
import org.apache.axis.handlers.*;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
public class WSClientHandler extends BasicHandler{
protected String keyStoreFile ;
protected String keyStoreType ="JKS";//默认
protected String keyStorePassword ;
protected String keyAlias ;
protected String keyEntryPassword ;
protected String trustStoreFile ;
protected String trustStoreType = "JKS";//默认
protected String trustStorePassword ;
protected String certAlias ;

public void setInitialization(String keyStoreFile,String keyStoreType,String keyStorePassword,
          String keyAlias,String keyEntryPassword,String trustStoreFile,
          String trustStoreType,String trustStorePassword,String certAlias){
this.keyStoreFile=keyStoreFile;
this.keyStoreType=keyStoreType;
this.keyStorePassword=keyStorePassword;
this.keyAlias=keyAlias;
this.keyEntryPassword=keyEntryPassword;
this.trustStoreFile=trustStoreFile;
this.trustStoreType=trustStoreType;
this.trustStorePassword=trustStorePassword;
this.certAlias=certAlias;
}
public void setInitialization(String keyStoreFile,String keyStorePassword,
          String keyAlias,String keyEntryPassword,String trustStoreFile,
          String trustStorePassword,String certAlias){
this.keyStoreFile=keyStoreFile;
this.keyStorePassword=keyStorePassword;
this.keyAlias=keyAlias;
this.keyEntryPassword=keyEntryPassword;
this.trustStoreFile=trustStoreFile;
this.trustStorePassword=trustStorePassword;
this.certAlias=certAlias;
}
public void invoke(MessageContext messageContext) throws AxisFault {//在这个方法里对XML文档进行处理
  //do nothing now!
}
public void onFault(MessageContext msgContext) {
  System.out.println("处理错误,这里忽略!");
    }
}

 

 

package wss;
import org.apache.axis.handlers.*;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.message.*;
import java.io.*;
import java.security.MessageDigest;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPElement;
import org.w3c.dom.Document;
public class WSClientRequestHandler extends WSClientHandler{
public void invoke(MessageContext messageContext) throws AxisFault {
  try {

  SOAPMessage soapMessage = messageContext.getMessage();
  System.out.print("签名加密以前"+soapMessage.getSOAPPart().getEnvelope());
  Document doc = MessageConverter.convertSoapMessageToDocument (soapMessage); //soapMessage转换为Document
  WSHelper.sign (doc, keyStoreFile, keyStoreType,keyStorePassword, keyAlias,  keyEntryPassword); //数字签名
  WSHelper.encrypt(doc, trustStoreFile, trustStoreType, trustStorePassword, certAlias); //加密
  soapMessage = MessageConverter.convertDocumentToSOAPMessage(doc);
  System.out.print("签名加密以后"+soapMessage.getSOAPPart().getEnvelope());
//处理后的Document再转换回soapMessage
  messageContext.setMessage(soapMessage);
  } catch (Exception e){
  System.err.println("在处理响应时发生以下错误: " + e);
    e.printStackTrace(); }
    }
}

 

 

package wss;
import org.apache.axis.handlers.*;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.message.*;
import java.io.*;
import java.security.MessageDigest;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPElement;
import org.w3c.dom.Document;

public class WSClientResponseHandler extends WSClientHandler{
public void invoke(MessageContext messageContext) throws AxisFault {
  try {

        SOAPMessage soapMessage = messageContext.getCurrentMessage();
        Document doc = MessageConverter.convertSoapMessageToDocument(soapMessage);

    WSHelper.decrypt(doc, keyStoreFile, keyStoreType,
                    keyStorePassword, keyAlias, keyEntryPassword); //解密

        WSHelper.verify (doc, trustStoreFile, trustStoreType, trustStorePassword); //验证
        WSHelper.removeWSSElements(doc);
        soapMessage = MessageConverter.convertDocumentToSOAPMessage(doc);
        messageContext.setMessage(soapMessage);
  } catch (Exception e){
        e.printStackTrace();
        System.err.println("在处理响应时发生以下错误: " + e);
                }

    }
}

 

 

package wss;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.w3c.dom.Document;
import java.security.PrivateKey;
import java.security.cerX509Certificate;

import com.verisign.xmlsig.Signer;
import com.verisign.xmlsig.SigningKey;
import com.verisign.xmlsig.SigningKeyFactory;
import com.verisign.xmlsig.KeyInfo;
import com.verisign.messaging.WSSecurity;
import com.verisign.xpath.XPath;
import org.xmltrustcenter.verifier.X509TrustVerifier;
import org.xmltrustcenter.verifier.TrustVerifier;
import com.verisign.messaging.MessageValidity;
import java.security.PublicKey;
import javax.crypto.KeyGenerator;
import java.security.SecureRandom;
import javax.crypto.SecretKey;
import com.verisign.xmlenc.AlgorithmType;
public class WSHelper {
   static String PROVIDER="ISNetworks";//JSSE安全提供者。
//添加JSSE安全提供者,你也可以使用其它安全提供者。只要支持DESede算法。这是程序里动态加载还可以在JDK中静态加载
   static
   {
     java.security.Security.addProvider(new com.isnetworks.provider.jce.ISNetworksProvider());
 }


 /**
 *对XML文档进行数字签名。
 */
   public static void sign(Document doc, String keystore, String storetype,
                               String storepass, String alias, String keypass) throws Exception {
         FileInputStream fileInputStream = new FileInputStream(keystore);
         java.security.KeyStore keyStore = java.security.KeyStore.getInstance(storetype);
         keyStore.load(fileInputStream, storepass.toCharArray());
         PrivateKey key = (PrivateKey)keyStore.getKey(alias, keypass.toCharArray());
         X509Certificate cert = (X509Certificate)keyStore.getCertificate(alias);
         SigningKey sk = SigningKeyFactory.makeSigningKey(key);
         KeyInfo ki = new KeyInfo();
         ki.setCertificate(cert);
         WSSecurity wss  = new WSSecurity();//ws-security.jar中包含的WSSecurity类
         wss.sign(doc, sk, ki);//签名。
        // com.verisign.xmlsig.Signer s=new com.verisign.xmlsig.Signer(doc, sk, ki);
        // doc=s.sign();


   }

 

 

 

 /**
 *对XML文档进行身份验证。
 */
   public static boolean verify(Document doc, String keystore, String storetype,
                               String storepass) throws Exception {
         FileInputStream fileInputStream = new FileInputStream(keystore);
         java.security.KeyStore keyStore = java.security.KeyStore.getInstance(storetype);
         keyStore.load(fileInputStream, storepass.toCharArray());
         TrustVerifier verifier = new X509TrustVerifier(keyStore);
         WSSecurity wSSecurity = new WSSecurity();
         MessageValidity[] resa = wSSecurity.verify(doc, verifier, null,null);
         if (resa.length > 0)
               return resa[0].isValid();
         return false;
   }

 

 


 /**
 *对XML文档进行加密。必须有JSSE提供者才能加密。
 */
   public static void encrypt(Document doc, String keystore, String storetype,
                               String storepass, String alias) throws Exception {
         try
         {
         FileInputStream fileInputStream = new FileInputStream(keystore);
         java.security.KeyStore keyStore = java.security.KeyStore.getInstance(storetype);
         keyStore.load(fileInputStream, storepass.toCharArray());
         X509Certificate cert = (X509Certificate)keyStore.getCertificate(alias);
         PublicKey pubk = cert.getPublicKey();
         KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede",PROVIDER);
         keyGenerator.init(168, new SecureRandom());
         SecretKey key = keyGenerator.generateKey();
         KeyInfo ki = new KeyInfo();
         ki.setCertificate(cert);
         WSSecurity wss = new WSSecurity();
         wss.encrypt(doc, key, AlgorithmType.TRIPLEDES, pubk, AlgorithmType.RSA1_5, ki);
      // com.verisign.xmlenc.Encryptor enc=new  com.verisign.xmlenc.Encryptor(doc, key, AlgorithmType.TRIPLEDES, pubk, AlgorithmType.RSA1_5, ki);
      // doc=enc.encrypt();
     } catch(Exception e) {
         e.printStackTrace();
     }
}

 


 /**
 *对文档进行解密。
 */
   public static void decrypt(Document doc, String keystore, String storetype,
                               String storepass, String alias, String keypass) throws Exception {
          System.out.print(doc);
         FileInputStream fileInputStream = new FileInputStream(keystore);
         java.security.KeyStore keyStore = java.security.KeyStore.getInstance(storetype);
         keyStore.load(fileInputStream, storepass.toCharArray());
         PrivateKey prvk2 = (PrivateKey)keyStore.getKey(alias, keypass.toCharArray());

         WSSecurity wSSecurity = new WSSecurity();
         wSSecurity.decrypt(doc, prvk2, null);
         String xpath = "//xenc:EncryptedData";
         String[] ns ={ "xenc", "
http://www.w3.org/2001/04/xmlenc#" };
         XPath xPath = new XPath(xpath, ns);

        // com.verisign.xmlenc.Decryptor dec=new com.verisign.xmlenc.Decryptor(doc, prvk2, xPath);
        // doc=dec.decrypt();
         WSSecurityExtn.removeWSSEncryptedKey (doc);//从 WS-Security Header中删除 EncryptedKey 元素
   }

   public static void removeWSSElemeDocument doc) throws Exception {
       WSSecurityExtn.removeWSSInfo(doc);// 删除WSS相关的元素。
   }

}

 

 

package wss;


import org.w3c.dom.Document;
import com.verisign.domutil.DOMWriteCursor;
import com.verisign.domutil.DOMCursor;
import com.verisign.messaging.XmlMessageException;
import com.verisign.util.Namespaces;

public class WSSecurityExtn {
    private static final String WSSE_URI =
        "http://schemas.xmlsoap.org/ws/2002/07/secext";
   private static final String WSSE_PREFIX = "wsse";
    private static final String WSU_URI =
       "http://schemas.xmlsoap.org/ws/2002/07/utility";
  private static final String WSU_PREFIX = "wsu";
 private static final String SOAP_URI = Namespaces.SOAPENV.getUri();
   private static final String SOAP_PREFIX = Namespaces.SOAPENV.getPrefix();
   private static final String XMLSIG_URI = Namespaces.XMLSIG.getUri();
   private static final String XMLSIG_PREFIX = Namespaces.XMLSIG.getPrefix();
    private static final String XMLENC_URI = Namespaces.XMLENC.getUri();
    private static final String XMLENC_PREFIX = Namespaces.XMLENC.getPrefix();
   private static final String SOAP_ENVELOPE = "Envelope";
    private static final String SOAP_HEADER = "Header";
    private static final String SOAP_BODY = "Body";
    private static final String SOAP_FAULT = "Fault";
    private static final boolean USE_WSU_FOR_SECURITY_TOKEN_ID = false;

    public static void removeWSSEncryptedKey(Document message) throws XmlMessageException {
        DOMWriteCursor c = new DOMWriteCursor(message);
        checkEnvelope(c);

        // Remove EncryptedKey elem. from WS-Security Header Element
        if (c.moveToChild(SOAP_URI, SOAP_HEADER)) {
            if (c.moveToChild(WSSE_URI, "Security")) {
                if (c.moveToChild(XMLENC_URI, "EncryptedKey")) {
                   c.remove();
                }
            }
        }
    }

    public static void removeWSSInfo(Document message) throws XmlMessageException {
        DOMWriteCursor c = new DOMWriteCursor(message);
        checkEnvelope(c);

        // Remove WS-Security Header Element
        if (c.moveToChild(SOAP_URI, SOAP_HEADER)) {
            if (c.moveToChild(WSSE_URI, "Security")) {
                c.remove();
           }
        }

        // Remove Timestamp Header Element
       c.moveToTop();
        if (c.moveToChild(SOAP_URI, SOAP_HEADER)) {
            if (c.moveToChild(WSU_URI, "Timestamp")) {
                c.remove();
            }
        }

        // Remove wsu:Id attribute from Body Element
        c.moveToTop();
        if (c.moveToChild(SOAP_URI, SOAP_BODY)) {
            c.setAttribute(WSU_URI, WSU_PREFIX, "Id", null);
        }
    }

    private static void checkEnvelope(DOMCursor c) throws XmlMessageException {
        c.moveToTop();
        if (!c.atElement(SOAP_URI, SOAP_ENVELOPE)) {
            throw new XmlMessageException("Missing SOAP envelope");
        }
  }
}

 


package wss;
import org.apache.axis.handlers.*;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;

public class WSServerHandler extends BasicHandler{
protected String keyStoreFile ;
protected String keyStoreType ="JKS";//默认
protected String keyStorePassword ;
protected String keyAlias ;
protected String keyEntryPassword ;
protected String trustStoreFile ;
protected String trustStoreType = "JKS";//默认
protected String trustStorePassword ;
protected String certAlias ;

public void invoke(MessageContext messageContext) throws AxisFault {
  //do nothing now!
}
public void onFault(MessageContext msgContext) {
  System.out.println("处理错误,这里忽略!");
    }
public void init() { //初始化,从配置文件server-config.wsdd中读取属性
  keyStoreFile = (String)getOption("keyStoreFile");
  if(( keyStoreFile== null) )
    System.err.println("Please keyStoreFile configured for the Handler!");
  trustStoreFile = (String)getOption("trustStoreFile");
  if(( trustStoreFile== null) )
  System.err.println("Please trustStoreFile configured for the Handler!");
  keyStorePassword = (String)getOption("keyStorePassword");
  if(( keyStorePassword== null) )
  System.err.println("Please keyStorePassword configured for the Handler!");
  keyAlias = (String)getOption("keyAlias");
  if(( keyAlias== null) )
  System.err.println("Please keyAlias configured for the Handler!");
  keyEntryPassword = (String)getOption("keyEntryPassword");
  if(( keyEntryPassword== null) )
  System.err.println("Please keyEntryPassword configured for the Handler!");
  trustStorePassword = (String)getOption("trustStorePassword");
  if(( trustStorePassword== null) )
  System.err.println("Please trustStorePassword configured for the Handler!");
  certAlias = (String)getOption("certAlias");
  if ((certAlias==null))
    System.err.println("Please certAlias configured for the Handler!");
  if ((getOption("keyStoreType")) != null)
    keyStoreType = (String)getOption("keyStoreType");
  if ((getOption("trustStoreType")) != null)
    trustStoreType = (String)getOption("trustStoreType");
  }
}

 

 

package wss;
import org.apache.axis.handlers.*;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.message.*;
import java.io.*;
import java.security.MessageDigest;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPElement;
import org.w3c.dom.Document;

public class WSServerRequestHandler extends WSServerHandler{
public void invoke(MessageContext messageContext) throws
AxisFault {
 try {
   SOAPMessage msg = messageContext.getCurrentMessage();
       Document doc = MessageConverter.convertSoapMessageToDocument(msg);
       System.out.println("接收的原始消息:");
       msg.writeTo(System.out);
       WSHelper.decrypt(doc, keyStoreFile, keyStoreType,keyStorePassword, keyAlias, keyEntryPassword); //解密
       WSHelper.verify (doc, trustStoreFile, trustStoreType, trustStorePassword); //验证
       WSHelper.removeWSSElements(doc);
       msg = MessageConverter.convertDocumentToSOAPMessage(doc);
       System.out.println("怀原后的原始消息:");
       msg.writeTo(System.out);
       messageContext.setMessage(msg);
 } catch (Exception e){
       e.printStackTrace();
       System.err.println("在处理响应时发生以下错误: " + e);
               }

   }
}

 

 

package wss;
import org.apache.axis.handlers.*;
import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.message.*;
import java.io.*;
import java.security.MessageDigest;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPElement;
import org.w3c.dom.Document;

public class WSServerResponseHandler extends WSServerHandler{
public void invoke(MessageContext messageContext) throws AxisFault {
  try {

  SOAPMessage soapMessage = messageContext.getMessage();
    System.out.println("返回的原始消息:");
      soapMessage.writeTo(System.out);
    Document doc = MessageConverter.convertSoapMessageToDocument(soapMessage);

    WSHelper.sign(doc, keyStoreFile, keyStoreType,
      keyStorePassword, keyAlias, keyEntryPassword);//数字签名
    WSHelper.encrypt(doc, trustStoreFile, trustStoreType,//加密
    trustStorePassword, certAlias);

    soapMessage = MessageConverter.convertDocumentToSOAPMessage(doc);
    System.out.println("返回的加密后的消息:");
    soapMessage.writeTo(System.out);
    messageContext.setMessage(soapMessage);
    } catch (Exception e){
    System.err.println("在处理响应时发生以下错误: " + e);
      e.printStackTrace();
      }

    }
}
server端
<handler name="ServerRequestHandler" type="java:wss.WSServerRequestHandler">
 <parameter name="keyStoreFile" value="f:/server.keystore"/>
 <parameter name="trustStoreFile" value="f:/server.truststore"/>
 <parameter name="keyStorePassword" value="changeit"/>
 <parameter name="keyAlias" value="Server"/>
 <parameter name="keyEntryPassword" value="changeit"/>
 <parameter name="trustStorePassword" value="changeit"/>
 <parameter name="certAlias" value="clientkey"/>
 </handler>
 <handler name="ServerResponseHandler" type="java:wss.WSServerResponseHandler">
  <parameter name="keyStoreFile" value="f:/server.keystore"/>
  <parameter name="trustStoreFile" value="f:/server.truststore"/>
  <parameter name="keyStorePassword" value="changeit"/>
  <parameter name="keyAlias" value="Server"/>
  <parameter name="keyEntryPassword" value="changeit"/>
  <parameter name="trustStorePassword" value="changeit"/>
  <parameter name="certAlias" value="clientkey"/>
 </handler>
client端:
WSClientHandler handler=new WSClientRequestHandler();
     handler.setInitialization("f:/client.keystore","changeit","Client","changeit",
               "f:/client.truststore","changeit","serverkey");
      WSClientHandler handlee=new WSClientResponseHandler();
      handlee.setInitialization("f:/client.keystore","changeit","Client","changeit",
               "f:/client.truststore","changeit","serverkey");
     call.setClientHandlers(handler,handlee);

分享到:
评论

相关推荐

    verisign安全加密的jar包

    此文件可能包含了实现时间戳验证和生成的相关类。 3. **ws-security.jar**:这个文件明显与Web服务安全有关,Ws-Security是Web Services Security的缩写,它是基于SOAP消息的安全标准,用于保护Web服务的通信。Ws-...

    在tomcat中实现https安全连接的方法

    在实现基于SSL的安全连接时,需要通过证书(Certificate)来验证双方的身份。当客户端与服务器进行通信时,通常会要求服务器出示证书,以此来验证服务器的真实身份。在某些情况下,还需要客户端提供证书,即所谓的...

    VeriSign Universal Root Certification Authority.rar

    VeriSign Universal Root Certification Authority 用于解决安装ps时的问题:the installation cannot continue as the installer file may be damaged

    VeriSign Universal Root Certification Authorityqqq

    分摊

    VeriSign Universal Root Certification Authority.cer

    windows系统内的证书,在证书存储下的"受信任的根证书颁发机构"。

    VeriSign Universal Root Certification Authority.cer证书

    此证书安装以后添加到信任区,用于解决Windows 7 平台上安装Adobe系列软件出现The installation cannot continue as the installer file may be damaged. Download the installer file again.详细参见:...

    基于XFire实施WS-Security

    综上所述,基于XFire实施WS-Security是实现Web Service安全的重要途径,它利用WS-Security标准在应用层提供了一套完整的安全策略。通过WSS4J和XFire的Handler机制,开发人员可以方便地对SOAP报文进行加密、签名和...

    论文研究-一种基于扩展ONS的链式发现服务方法.pdf

    总结了目前最新的EPC网络发现服务方法,在此基础上,提出了一种基于扩展ONS的链式发现服务方法。该方法通过扩展ONS静态信息,解决了EPC物品的当前位置的存储问题,并通过在企业EPCIS中维护指针数据库,从而实现了...

    Phppayflowpro

    Phppayflowpro 是一个基于PHP的支付处理库,专门设计用于与Verisign(Signio)的PayFlow Pro服务集成。PayFlow Pro是Verisign(现为PayPal的一部分)提供的一种全面的在线支付网关解决方案,允许商家接受各种支付...

    cas单点登录例子说明

    【单点登录(Single Sign-On, SSO)】 单点登录是一种身份验证机制,使得用户在访问多个相互关联的应用系统时只需要登录一次。...然而,要注意在实现扩展功能时考虑性能和准确性,比如改进在线用户统计的准确性。

    赛门铁克基于风险管理的解决方案.ppt

    安全管理中心(SOC)和基于ITIL的IT生命周期管理是实现这一目标的关键,确保日志审计、安全事故管理和配置合规。 赛门铁克的解决方案家族包括安全管理、事件和日志管理、信息安全管理、安全漏洞管理等多个方面,...

    VeriSign通用根证书认证机构证书文件(.cer)

    mysql以下是针对提供的资源文件介绍的一种重新表述方式,确保满足字数和内容的要求: 该资源文件代表Windows操作系统内部的一个关键组件,即位于证书存储中的“受信任的根证书颁发机构”列表中的证书。...

    java实现HttpClient异步请求资源的方法

    本篇文章将详细介绍如何使用Java的HttpClient实现异步请求资源。 首先,让我们了解什么是异步请求。在同步请求中,调用一个API或发送一个HTTP请求后,程序会等待响应返回,然后继续执行后续代码。而异步请求则不同...

    基于activex的dsoFramer在线编辑控件加证书

    **基于ActiveX的DSOFramer在线编辑控件加证书** DSOFramer是一个基于ActiveX技术的控件,它允许在Web应用程序中嵌入并编辑Microsoft Office文档,如Word、Excel等。通过DSOFramer,用户可以在浏览器环境中实现对...

    CAN总线在ARM处理器EP9315中的实现.pdf

    - 具备VeriSign Crunch数学协处理器。 - 提供丰富的集成外设接口,如以太网MAC、USB2.0全速主口、SPI、I2S、AC97串行接口、PCMCIA接口、以及支持LCD显示。 4. **SJA1000独立CAN控制器**: 在本设计中,SJA1000是...

    canute:启用Internet规模的联合安全性是基于DNS的命名实体身份验证(DANE)和DNSSEC!

    Canute是一个C ++库,它实现了IETF工作组指定的,基于DNS的命名实体身份验证(DANE)协议集不断增长的集合: : Canute是DANE的参考实现,目前实现DANE的所有S / MIME功能(SMIMEA),其Open PGP功能(OPENPGPKEY...

    DigiCert_USERFirst_VeriSign_Comodo_GlobalSign_and_USERTrust.bat

    asdf

Global site tag (gtag.js) - Google Analytics