大家好,第一次在CSDN上求助,自己实在是搞不定了:
    现在的结构是:服务端Servlet提供服务,客户端向这个servlet发出请求后响应。
    现在的问题是,如何让一些非法的客户端(攻击者修改代码后重新打包的jar文件)不能正常访问到这个servlet?
    比如:只能我自己用(.keystore文件)签名的Client.jar客户端才可以建立与servlet的连接,攻击者下载Client.jar 反编译修改后重新打包,
但是没用我的(.keystore文件)签名,就不能与服务器上的Servlet通信,或者Servlet拒绝?
    现在没用一个明确的概念,用SSL也无法实现,难道这是个无法解决的问题吗?

解决方案 »

  1.   

    如何定义一个用户是非法用户呢?
    难道说从服务端发给他的Client.jar 发生改变啦
    如果是这样的话,那在服务端检查客户端发送回来的反编译的Client.jar 文件呗,如果是非法的话,就进制与servlet通信
      

  2.   

    服务器上提供Client.jar文件下载,客户下载后运行此程序访问指定的Sevlet。
    非法用户指的是:自己反编译Client.jar文件,修改一些内容后再打包为一个jar文件,访问同样的Servlet,这就是非法访问。
    因为客户端jar文件不是原先的程序了。
    你说的服务端检查客户端的Client.jar文件怎么实现?如果只是提取了Client.jar文件中的相关签名信息,
    然后在与Servlet建立连接的时候传递过去,那攻击者完全客户获取这个标识号,服务端还得认同此次连接
      

  3.   

    答:若楼主的安全要求很重要的话,不如:
    1)每一个客户机方需要一个USB硬件狗
    2)Client.jar加密
    (这样:既用了USB硬件狗多挣些钱,又有安全性)
    运行时:USB硬件狗中程序在内存中对边Client.jar解密边运行。
      

  4.   


    Client.jar文件加密是个办法,不过不是最好的办法。
    客户端安装USB硬件狗应该也不能解决问题,
    因为攻击者可以反编译代码后仿效依然可以在自己的程序中正确运行的。攻击者的特点:
    1、是合法用户,意味着用户名、密码可以通过服务端检验。
    2、基本上可以反编译出客户端程序代码(通过反编译Client.jar文件实现)。
    3、如果只是简单的客户端加码,则攻击者可以在新程序中仿照Client.jar中的解密方法,
       包括读取一些特定的标识符等等(USB KEY, 客户端随机码加密等等)要求:
    只是本人签名过的jar文件可以访问服务端,其他任何没有本人签名或者被修改过的jar程序不可访问服务端。求高手支招!