<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    David.Turing's blog

     

    準備寫這樣一個安全客戶端工具SecureX

    我已經寫了一個XML簽名的工具SecureX——可以選擇證書庫,選擇私鑰簽名,選擇公鑰驗證簽名,選擇圖章嵌入簽名,從圖章中讀取簽名等功能。
    目前,我打算將工具作為RCP方式發布(需要花一些時間,未作為RCP發布之前,該軟件還不能在其他機器運行,因為我使用了SWT(Eclipse
    的標準界面庫)做界面),SWT是一種Native Look的界面庫,因此發布的時候,需要發布多個版本,這通過RCP來做是比較容易的。

    另外,我定義了一些future feature:
    1,能從服務器下載最新的證書列表,并選擇信任哪些證書。
    2,下載CRL,并確定有哪些證書已經撤銷。
    3,支持XML加密/解密標準
    4,加入數據安全傳輸通道
       a) 支持Diffie Hellman的密鑰協商方式建立的SecureSocket
       b) 通過數字證書建立的非對稱加密的SecureSocket
    5,加入HMAC標準,能夠在兩個SecureX之間,SecureX與服務器之間建立數據完整性標準
    6,SecureX符合Eclipse plugin標準規范,即能夠以Eclipse Plugin發布,而且能夠作為
       單獨的Rich Client Application發布,同時能夠在線自動更新。

    posted @ 2006-01-18 11:18 david.turing 閱讀(737) | 評論 (0)編輯 收藏

    RSA使用簡述

    RSA協議我不再描述,大家可以看http://www.di-mgt.com.au/rsa_alg.html
    RSA的密鑰對生成時間依賴于兩個因素,
    第一,密鑰的長度
    第二,素數的篩選質量

    在整個密鑰對生成過程中,RSA會隨機選擇兩個大素數,事實上,計算機的聰明
    程度還不足以判斷某個隨機選擇的大素數是否真的不可分解,因此,你只能夠通過
    計算機程序來盡量將這個大隨機數不是素數的幾率降到某個界限值(如0.0001)以下。

    RSA KeyPair分為公鑰和私鑰,你應該這樣使用KeyPair:
    1,你使用私鑰來簽名,別人用你的公鑰來驗證簽名
    2,別人用你的公鑰加密信息M->M',你用私鑰來解密信息M'->M

    雖然RSA經受過多年深入的密碼分析,但大家在使用RSA的時候還是要注意以下事項,
    否則RSA的安全性會大打折扣:

    1,合理的密鑰長度(setKeyLength)
    RSA1024至今是安全的,按照目前密碼分析和計算機硬件條件的發展,估計在未來5-10年,
    仍以難以破解。

    2,素數確定性選擇(setCertaintyOfPrime)
    實際應用中,選擇100就行了。

    3,選擇合理的padding(setRSAMode)
    RSA有三種模式,RAW, PKCS和OAEP,日常應用中,我本人只使用PKCS(PKCS#1 v1.5)
    和OAEP(PKCS#1 v2.0)這兩種padding模式。
    padding跟安全性其實是緊密掛鉤的,有興趣的朋友可以看看PKCS#1標準討論。


    我編寫了一個RSAUtils的工具類,下面的該類的測試代碼的一部分。

    程序如下:
      RSAUtils utils =new RSAUtils();
      utils.setKeyLength(1024);
      utils.setCertaintyOfPrime(100);
      utils.setRSAMode(PKCS_RSA_MODE);   //RAW =1  PKCS=2  OAEP=3
      utils.initRSAKeyPair();
      
      //查看公鑰
      RSAKeyParameters mypubkey=utils.getPublicKey();
      BigInteger mypubkey_modulus=mypubkey.getModulus();  
      BigInteger mypubkey_exponent=mypubkey.getExponent();
      System.out.println("##mypubkey的modulus長度="+mypubkey_modulus.bitLength());
      System.out.println("##mypubkey_modulus值="+mypubkey_modulus.toString());
      System.out.println("##mypubkey的exponent長度="+mypubkey.getExponent().bitLength());
      System.out.println("##mypubkey_exponent值="+mypubkey_exponent.toString());

      //查看私鑰
      RSAKeyParameters myprivkey=utils.getPrivateKey();
      BigInteger myprivkey_modulus=myprivkey.getModulus();
      System.out.println("##myprivkey的modulus長度="+myprivkey_modulus.bitLength());
      System.out.println("##myprivkey的modulus值="+myprivkey_modulus.toString());
      System.out.println("##myprivkey.getExponent()長度="+myprivkey.getExponent().bitLength());
      System.out.println("##myprivkey.getExponent()值="+myprivkey.getExponent());

    以下是輸出:
    ##mypubkey的modulus長度=1024
    ##mypubkey_modulus值=93806062666699782638132820491933031482836826566660997927543724649365705443512121003172409185855121369631538039111403612211728268332662414248776212969019881724066055080327735965218365399595323200109436472147258110417469825748181131149217613806780318374365617984326523029965066348377550281908277056378455106547
    ##mypubkey的exponent長度=2
    ##mypubkey_exponent值=3

    ##myprivkey的modulus長度=1024
    ##myprivkey的modulus值=93806062666699782638132820491933031482836826566660997927543724649365705443512121003172409185855121369631538039111403612211728268332662414248776212969019881724066055080327735965218365399595323200109436472147258110417469825748181131149217613806780318374365617984326523029965066348377550281908277056378455106547
    ##myprivkey.getExponent()長度=1023
    ##myprivkey.getExponent()值=62537375111133188425421880327955354321891217711107331951695816432910470295674747335448272790570080913087692026074269074807818845555108276165850808646013241363962278455328383552959397735977285649455021534046301135296075808377308404258909132811288204167107604525033796313576612747649866739561523887875979483707

    其中,要記住,公鑰的exponent即RSA算法中的e, e通常是3,17和65537
    X.509建議使用65537,PEM建議使用3,PKCS#1建議使用3或65537,一般來說,都是選擇3。

    私鑰的Exponent就是私鑰中最重要的部分,它就是私鑰區別于公鑰的地方!

    接著,我們看看RSA的加密,解密過程。

    通常,不要隨便對某一個別人發過來的東西進行簽名(有潛在危險),即使有這樣的必要,請先將它的文件進行Digest或者HMAC
    處理后,再做簽名。
    為了說明RSA是如何加密信息的,我先讓大家脫離MD5/SHA1等輔助算法(沒有人會單獨使用RSA,RSAwithMD5,RSAwithSHA1才是常用的使用方法),來單獨看看RSA本身:

    大家習慣了DES/IDEA,再看RSA的加密,可能會有一些不習慣,因為RSA雖然也可以看成是基于Block的加密,但是,RSA的輸入和輸出的Block的大小是不一樣的,Block的大小依賴于你所使用的RSA Key的長度和RSA的padding模式。
    在RSAUtils測試用例中,分別對RSA設置三種長度的Key(768,1024,2048)和2種padding模式(PKCS 1.5和OAEP),結果如下:

    RSA                InBlock大小   OutBlock大小  (單位,字節)
    768bit/PKCS        85                96
    1024bit/PKCS     117               128
    2048bit/PKCS     245               256
    768bit/OAEP        54                96
    1024bit/OAEP     86               128
    2048bit/OAEP     214               256

    大家可以看到,相同密鑰長度, 加密出來的密文長度要比明文要長,且OAEP的InBlock/OutBlock要比PKCS的InBlock/OutBlock要小,單從熵的角度,意味著OAEP padding模式引入更多的熵,OAEP要比PKCS更安全(事實上,為何提出OAEP代替PKCS,大家可以到RSA網站看看OAEP文檔 http://www.rsasecurity.com/rsalabs/node.asp?id=2125)。


    下面,RSAUtils是我寫的針對BouncyCastle的一個工具類,它封裝了BouncyCastle的crypto中的RSAEngine,基本上,我很少單獨使用RSAUtils,我更多的是結合DiegestUtils來使用。

    posted @ 2006-01-11 11:24 david.turing 閱讀(10487) | 評論 (4)編輯 收藏

    初玩Buffalo

    頁面調用服務器的一個類里面的方法,做下面的步驟就可以了,前提是你配置好了buffalo那個demo。
    只需執行下面三個步驟,就可以完成一個簡單的乘法調用。

    =====================
    Spring例子(使用于1.2以前的版本)
    =====================
    1)  HTML頁面上
    /buffalo/WebContent/pages/simple.html


    增加頁面輸入框

    <h4>1 Multipy calculator</h4>
    <p>
      <input name="double4" type="text" class="input_text" id="double4" size="12">
      *
      <input name="double5" type="text" class="input_text" id="double5" size="12">
      <input type="button" name="Submit" value=" = " onclick="cmdMulitply()">
      <input name="double6" type="text" class="input_text" id="double6">
    </p>

    增加JS調用
    function cmdMulitply(){
       var double4 =parseFloat(Buffalo.getElementById("double4").value);
       var double5 =parseFloat(Buffalo.getElementById("double5").value);
       var d6Handle =Buffalo.getElementById("double6");
      
       buffalo.remoteCall("hnisi_service.multiply",[double4,double5], function(reply) {
      d6Handle.value = reply.getResult();
      
      alert(reply.getResult());
     })
    }


    2)/buffalo/JavaSource/demo/buffalo-service.properties文件
    加入
    # 調整所有的Service
    hnisi_service=net.buffalo.demo.hnisi.HnisiService

    3)/buffalo/JavaSource/demo/net/buffalo/demo/hnisi/HnisiService.java
    增加multiply方法

    package net.buffalo.demo.hnisi;

    public class HnisiService {

     public double multiply(double a, double b) {
      System.out.println("Calling Multipy...,a="+a+", b="+b+"    結果="+a*b);
      try {
       Thread.sleep(1000);
      } catch (Exception e) {
       e.printStackTrace();
      }
      return a*b;
     }
    }


    =====================
    Spring例子
    =====================
    Buffalo的1.2版本加入了Spring功能,如果你想使用Spring特性,上述的過程如下:
    1)  HTML頁面上
    /buffalo/WebContent/pages/simple-spring-2.html

    增加頁面輸入框

    <h4>1 Multipy calculator</h4>
    <p>
      <input name="double4" type="text" class="input_text" id="double4" size="12">
      *
      <input name="double5" type="text" class="input_text" id="double5" size="12">
      <input type="button" name="Submit" value=" = " onclick="cmdMulitply()">
      <input name="double6" type="text" class="input_text" id="double6">
    </p>

    增加JS調用
    function cmdMulitply(){
       var double4 =parseFloat(Buffalo.getElementById("double4").value);
       var double5 =parseFloat(Buffalo.getElementById("double5").value);
       var d6Handle =Buffalo.getElementById("double6");
      
       buffalo.remoteCall("hnisi_service.multiply",[double4,double5], function(reply) {
      d6Handle.value = reply.getResult();
      
      alert(reply.getResult());
     })
    }


    2)/buffalo/JavaSource/demo/buffalo-service.properties文件
    加入
    # 調整所有的Service
    hnisi_service=net.buffalo.demo.hnisi.HnisiService

    3)/buffalo/JavaSource/demo/net/buffalo/demo/hnisi/HnisiService.java
    增加multiply方法

    package net.buffalo.demo.hnisi;

    public class HnisiService {

     public double multiply(double a, double b) {
      System.out.println("Calling Multipy...,a="+a+", b="+b+"    結果="+a*b);
      try {
       Thread.sleep(1000);
      } catch (Exception e) {
       e.printStackTrace();
      }
      return a*b;
     }
    }

    4)修改/buffalo/WebContent/WEB-INF/applicationContext.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "

    <beans>
     
     <bean name="simpleService" class="net.buffalo.demo.simple.SimpleService"></bean>
     <bean name="hnisiService" class="net.buffalo.demo.hnisi.HnisiService"></bean>
     <bean name="numberService" class="net.buffalo.demo.numberguess.NumberGuessService"></bean>
     
     <bean name="buffaloConfigBean" class="net.buffalo.service.BuffaloServiceConfigurer">
      <property name="services">
                <map>
                    <entry key="springSimpleService">
                        <ref bean="simpleService"/>
                    </entry>
         <entry key="springNumberService">
                        <ref bean="numberService"/>
                    </entry>
                    <entry key="springHnisiService">
                     <ref bean="hnisiService"/>
                    </entry>
                </map>
            </property>
     </bean>
     
    </beans>

    總體感覺是簡潔,無須關注xmlhttp,告別xml讓我感到有點欣慰。

     

     

    posted @ 2005-12-28 17:12 david.turing 閱讀(1958) | 評論 (1)編輯 收藏

    200多米的兩個點間如何做無線局域網

    這兩天搞無線局域網搞死我了,本來局域網是很好搞的,但是偏偏是兩棟樓之間做無線局域網,那兩棟樓有200多米,因此需要定向天線。 A點:(構建無線局域網) 無線AP(DLink),ADSL Modem ,高增益定向天線 B點:(接入到A點的無限網)無線網卡(LinkSys),高增益定向天線 Solution: B點作為一個無線局域網的一個接入點,AP當作一個交換機用,跟我們平時的Switch沒有區別。 以后有廣州的朋友需要搞無線發送的朋友可以找我,太平洋電腦城2條天線要1千多塊錢,Cable要40元/米,我是到無線廠找朋友自己組裝的,2條天線加上10米Cable一共要155元:) 另外 LinkSys 迷你型 AP():368元 DLink 無線網卡:210元 該方案適合于那些在兩棟樓之間共享上網的家庭,如果兩邊都有自己的局域網,想共享網絡,需要買兩個不帶路由的AP來做橋接(Bridge),那種不帶路由的AP比帶路由的AP要貴得多! Anyway,該是享受無線上網帶來的喜悅了,不用申請兩條ADSL了:)

    posted @ 2005-12-25 10:43 david.turing 閱讀(1540) | 評論 (2)編輯 收藏

    關于如何發展Dev2dev 廣州UserGroup?

    我本來想將UG發展成立足于Dev2dev, Blogjava和Matrix大融合的面對面的架構師論壇,大家有什么好建議,回復一下,謝謝!

    posted @ 2005-12-18 16:58 david.turing 閱讀(320) | 評論 (0)編輯 收藏

    Ktpass和KTab的主要用法

    不少人都沒搞清楚Ktpass跟Ktab的用法,特此寫一篇文章來敘說一下。
    我假設你對Kerberos有所認識,可以讀我的一篇文章<Weblogic Security In Action>中篇,里面初步介紹了Kerberos協議(基于Windows KDC)。
    在Kerberos中,安全性完全是依賴于Share Secret,也就是,KDC跟Kerberos Service之間都共享著一條Key,Ktpass這個命令行工具承擔著這樣一個角色,它能夠將非Windows Kerberos服務配置一個Service Principal,通常類似于HTTP/Service@DomainName,并且同時生成一個Keytbab,這樣做的目的是在Windows域中的KDC和非Windows的服務(Kerberos Service)建立一種安全的信任關系,Keytab文件中就是存放著那條非常重要的跟KDC打交道的Secret Key。

    你更改了Keytab中的Key,就必須同時更改Kerberos database中的Key。操作Keytab,JDK提供了一個很好的工具叫做KTab。


    首先,在Windows域控制器上創建一個用戶tomcat2005, 這是一個Windows的用戶,我們使用Ktpass將一個Kerberos service (HTTP/tomcat@MYDAVID.ORG)Mapping到這個用戶上面。Ktpass會修改當前用戶在Windows AD中的用戶登錄名,你可以用setspn -L tomcat2005來查看究竟有多少Service Principal綁定到tomcat2005上。


    C:\>ktpass -princ HTTP/tomcat@MYDAVID.ORG  -mapuser tomcat2005 -pass tomcat2005 -out tomcat2005_keytab -crypto des-cbc-md5
    Successfully mapped HTTP/tomcat to tomcat2005.
    Key created.
    Output keytab to tomcat2005_keytab:

    Keytab version: 0x502
    keysize 50 HTTP/tomcat@MYDAVID.ORG ptype 1 (KRB5_NT_PRINCIPAL) vno 1 etype 0x3 (DES-CBC-MD5) keylength 8 (0xb64540dace6e70d3)
    Account has been set for DES-only encryption.


    接著,執行,目的是往keytab上面增加新的service principal。
    C:\>ktab -k tomcat2005_keytab -a HTTP/tomcat@MYDAVID.ORG
    Password for HTTP/tomcat@MYDAVID.ORG:tomcat2005
    Done!
    Service key for HTTP/tomcat@MYDAVID.ORG is saved in C:\\tomcat2005_keytab

    你可能問,Ktpass和Ktab都往keytab文件兩面寫Key,其實,他們都是寫同樣的Key,只不過Ktpass還有一個AD帳號Set SPN Name的作用。

    還可以通過ktab -l -k tomcat2005_keytab, 來看看里面究竟有針對什么Service的Key

    C:\>ktab -l -k tomcat2005_keytab
    Keytab name: C:\\tomcat2005_keytab
    KVNO    Principal
    --------------------------------
      4     HTTP/tomcat@MYDAVID.ORG

    KVNO是Service Key的更新序號,不需要理會,關鍵的是Principal。

    posted @ 2005-12-02 00:48 david.turing 閱讀(6376) | 評論 (1)編輯 收藏

    Weblogic Security In Action

    Weblogic Security In Action(原創自david.turing)
    【Weblogic Security In Action】
    提交時間: Sep 28, 2005 5:41:16 PM
    加3分   回復   發消息
    WeblogicSecurityInAction(1).swf (607.8 K)


    摘要
    本文將探討Weblogic Platform中的安全框架以及在該框架下如何實現企業安全(Weblogic Enterprise Security,簡稱WLES)。
    本文分為上中下三篇。
    上篇主要闡述WLES的概念,將按照如下的思路,讓讀者對Weblogic安全框架有一個明晰的理解,并在此基礎上明白Weblogic基本安全要素如User,Group,Role,Resource。并探討在WLES下實現認證和授權的方法。
    中篇主要闡述WLES的配置,重點講述如何在WLS中配置SSL和證書,如何配置LDAP和數據庫,如何實現Windows集成安全,如何在開源技術如CAS,SAML,SPNEGO等基礎上實現單點登陸(Single Sign on,即SSO)。
    下篇主要解釋Weblogic Mbean機制,講述如何實現自己的Custom Security Provider,并解釋如何使用Weblogic Security Provider構造一個強大穩健的安全體系。

    [上篇]
    1, Weblogic Platform安全框架概述
    2, Security Realm下的用戶、組、角色、資源和安全策略
    3, 認證與授權
    [中篇]
    4, 配置SSL與數字證書
    5, Windows集成安全
    6, 單點登陸(SSO)
    [下篇]
    7, 實現自己的Security Provider
    8, 在Security Provider上構造靈活的安全體系


    上篇


    中篇


    中篇花的時間比較長,可能是我打字慢吧:)
    有不少地方有紕漏,希望各位大蝦指正,謝謝。

    posted @ 2005-11-28 02:04 david.turing 閱讀(6038) | 評論 (8)編輯 收藏

    慶祝廣州BEA UserGroup成立,為廣州深圳朋友提供互動交流平臺

    多年在Blogjava,Matrix,JavaEye游走后,我們彼此可能都很熟悉了,但這只是線上的,在線下,我們可能缺乏面對面交流的機會。今天,廣州UserGroup成立了,廣州UserGroup作為華南地區的中心樞紐,有著便捷的交通和廣泛的J2EE群體基礎。BEA廣州UserGruop是對Matrix,Dev2Dev,JavaEye,BlogJava的一種不同的組織形式,它以活動講座和面對面交流為主要方式。
    今天聯系了幾位本地區多年為開源做出貢獻的牛牛,他們對BEA廣州UserGroup都寄予厚望和表示支持,包括Chirs,農民,白衣,char等。
    我作為廣州UserGroup的組織人員之一,希望此Group能為廣大廣東地區的,尤其是廣州,深圳等地的J2EE愛好者提供一個值得信任的交流平臺。
    各位朋友,大家如果對戶外講座有什么好的建議(包括主題,時間地點,演講專家推薦等),請到
    http://dev2dev.bea.com.cn/bbs/forum.jspa?forumID=29304&start=0 發言。
    今年內,希望組織一次廣東地區(主要是廣州深圳)的J2EE高手見面會。

    posted @ 2005-10-20 00:28 david.turing 閱讀(580) | 評論 (0)編輯 收藏

    今天,瀏覽到一片關于評論Oracle SSO的文章,本人也持同樣看法。

    Evaluating Oracle Single Sign-On

    Many of you know about login.case.edu. It makes your lives much easier because now you only have to enter your password once for numerous web services. However, there is a problem with the service: it is too complicated. It is not too complicated for the average user, but for the people who implement it. Just look at the hoops you have to jump through to get it working on your own server. What's more is that it relies on a web server module (not everybody has access to the web server config files) and requires somebody in ITS to manually do work every time a new client wishes to use it. What is needed is an alternative.

    Well, we are already running an Oracle Single Sign-On product, so let's use that! OK, let's evaluate the Oracle product.

    1. We are using it because it is required by the portal.
    2. It requires manual intervention every time a new client wishes to use it. Isn't this a reason why we are investigating alternative?
    3. The Oracle products easily integrate with it. Hooray! No more separate logins for the portal and the calendar.
    4. Writing external programs to authenticate against it requires the use of a C or Java SDK. (I can hear the screams of agony now).
    5. The module mod_osso appears to only be available for Oracle's Application Server. Does it work with IIS? No. Does it work with your standalone Apache? I don't know either. Judging from a Google search, I'd say it isn't promising. Most importantly, does it work with mod_auth_ldap? Well, we don't know. If it doesn't, there is nothing we can do because the module is closed source.

    In summary, we are being forced to use Oracle Single Sign-On, but it works well with the Oracle Applications. No matter what we decide to do, we will have to use this product. If we decide to make it the only SSO service for the university, a significant amount of effort would be required for every new application deployed to use it. Would system administrators make this effort to configure it, or would they take the easy way out and just resort to the tried and true LDAP authentication? Also, any department that uses IIS to host web applications would be unable to use the service. Do we really want to deploy a single sign-on service that only a subset of the university can use?

    In my next post, I will explore alternatives to Oracle Single Sign-On and how they could integrate with the Oracle applications.

    posted @ 2005-08-11 14:04 david.turing 閱讀(1720) | 評論 (1)編輯 收藏

    僅列出標題
    共4頁: 上一頁 1 2 3 4 

    導航

    統計

    常用鏈接

    留言簿(110)

    我參與的團隊

    隨筆分類(126)

    隨筆檔案(155)

    文章分類(9)

    文章檔案(19)

    相冊

    搜索

    積分與排名

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 一区二区在线免费视频| 国产人成免费视频| 青青操视频在线免费观看| 亚洲爆乳精品无码一区二区| 中文字幕亚洲综合久久| 国产综合精品久久亚洲| 手机看片久久国产免费| 国产在线观看片a免费观看| 91久久青青草原线免费| 97在线免费观看视频| WWW国产成人免费观看视频| 国产精品亚洲AV三区| 亚洲日本成本人观看| 国内精品久久久久影院亚洲| 亚洲精品午夜在线观看| 亚洲日韩区在线电影| 亚洲国产精品无码久久一线 | 亚洲AV无码日韩AV无码导航| 亚洲人成电影网站国产精品 | 亚洲人色大成年网站在线观看| 亚洲av无码一区二区三区乱子伦| 中文字幕亚洲日本岛国片| 亚洲精品无码激情AV| 亚洲国产综合精品一区在线播放| 免费h成人黄漫画嘿咻破解版| 免费黄色大片网站| 暖暖在线日本免费中文| 国产精品视_精品国产免费 | 亚洲色大成网站www永久男同| 亚洲人成777在线播放| ww亚洲ww在线观看国产| 自拍日韩亚洲一区在线| 亚洲色在线无码国产精品不卡| 中文字幕亚洲精品无码| 中文有码亚洲制服av片| 亚洲爆乳精品无码一区二区| 国产精品久久久久久亚洲小说| 国产亚洲精品2021自在线| 四虎影视久久久免费| 久久精品成人免费国产片小草| 97人妻精品全国免费视频|