專利名稱:安全的網(wǎng)關(guān)接口的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及供網(wǎng)絡(luò)用的安全的網(wǎng)關(guān)接口,及更具體地涉及但不限于一種安全的網(wǎng)關(guān)接口,用于允許外部網(wǎng)絡(luò)用戶啟動(dòng)一個(gè)使用內(nèi)部資源的特許事務(wù)而不破壞安全防火墻。
圖1闡述一個(gè)現(xiàn)有技術(shù)安全的網(wǎng)關(guān)接口(SGI)9,它具有用于處理來(lái)自外部網(wǎng)絡(luò)(例如INTERNET)上任何用戶的用戶/顧客請(qǐng)求2的外服務(wù)器4(例如超文本傳送協(xié)議守護(hù)器HTTPD)和用于處理來(lái)自內(nèi)部網(wǎng)絡(luò)上的任何用戶(例如為具體公司工作的任何人)的請(qǐng)求的內(nèi)服務(wù)器7和內(nèi)數(shù)據(jù)庫(kù)8。SGI9還包括用于阻止從外部啟動(dòng)內(nèi)數(shù)據(jù)庫(kù)8上內(nèi)部事務(wù)的防火墻6。因此防火墻6禁止外部顧客對(duì)內(nèi)部網(wǎng)絡(luò)(即內(nèi)服務(wù)器7和內(nèi)數(shù)據(jù)庫(kù)8)啟動(dòng)直接連接。此限制禁止有效事務(wù),例如產(chǎn)品和服務(wù)購(gòu)買(mǎi)請(qǐng)求,因顧客就是不能自外部網(wǎng)絡(luò)啟動(dòng)內(nèi)部事務(wù)。
對(duì)上面描述的問(wèn)題的常規(guī)解法包括在防火墻6中開(kāi)一個(gè)供內(nèi)向通信用的特定端口(例如端口84)。然而此解法明顯地使內(nèi)部網(wǎng)絡(luò)易受外部攻擊。另一個(gè)解法是將全部所需資源(即數(shù)據(jù)庫(kù)8)放置于外服務(wù)器4上。然而,此解法仍然禁止執(zhí)行內(nèi)部事務(wù)。此外,外服務(wù)器4可能沒(méi)有足夠大的存儲(chǔ)器以保持全部所需資源或者資源可能保密性太強(qiáng)而不能放置于外服務(wù)器上(如顧客數(shù)據(jù)),因而限制可提供的服務(wù)。
因此十分需要一種技術(shù),用于允許顧客啟動(dòng)一個(gè)使用內(nèi)部業(yè)務(wù)資源的特許業(yè)務(wù)事務(wù)而不破壞安全防火墻。
因此,一種由計(jì)算機(jī)實(shí)施的方法,獨(dú)特地編程的計(jì)算機(jī)系統(tǒng)和包括計(jì)算機(jī)可讀程序裝置的制造產(chǎn)品允許外部網(wǎng)絡(luò)顧客啟動(dòng)一個(gè)使用內(nèi)部網(wǎng)絡(luò)上的內(nèi)部業(yè)務(wù)資源的特許業(yè)務(wù)事務(wù)而不破壞安全防火墻。
具體地說(shuō),該方法操作一個(gè)內(nèi)計(jì)算機(jī)系統(tǒng)以允許一個(gè)外計(jì)算機(jī)系統(tǒng)啟動(dòng)一個(gè)使用內(nèi)部資源的事務(wù)請(qǐng)求而不破壞內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)之間的安全防火墻。該方法包括對(duì)由內(nèi)計(jì)算機(jī)啟動(dòng)的內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)之間的連接進(jìn)行認(rèn)證,從而建立一個(gè)認(rèn)證的連接的第一步。第二步包括由外計(jì)算機(jī)系統(tǒng)調(diào)用一個(gè)外計(jì)算機(jī)系統(tǒng)收到的事務(wù)請(qǐng)求。第三步包括響應(yīng)于對(duì)事務(wù)請(qǐng)求的調(diào)用,由外計(jì)算機(jī)系統(tǒng)建立一個(gè)包括事務(wù)請(qǐng)求和用于執(zhí)行事務(wù)請(qǐng)求的過(guò)程環(huán)境變量的串。第四步包括由外計(jì)算機(jī)系統(tǒng)通過(guò)認(rèn)證的連接將串傳送至內(nèi)計(jì)算機(jī)系統(tǒng)。第五步包括由內(nèi)計(jì)算機(jī)系統(tǒng)確認(rèn)該事務(wù)請(qǐng)求。第六步包括由內(nèi)計(jì)算機(jī)系統(tǒng)重建初始過(guò)程環(huán)境。最后一步包括由內(nèi)計(jì)算機(jī)系統(tǒng)執(zhí)行事務(wù)請(qǐng)求從而生成一個(gè)輸出。
因此,本發(fā)明的一個(gè)目的是建立一個(gè)對(duì)用戶和實(shí)際事務(wù)程序都透明的安全的網(wǎng)關(guān)接口。
另一個(gè)目的是允許用戶有效地通過(guò)防火墻向使用內(nèi)部資源的內(nèi)部網(wǎng)絡(luò)啟動(dòng)一個(gè)事務(wù)。
又一個(gè)目的是允許用戶只啟動(dòng)特許事務(wù)的有效集合。
還有一個(gè)目的是在外計(jì)算機(jī)系統(tǒng)收到來(lái)自用戶的事務(wù)請(qǐng)求之前安全地特許內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)之間的一個(gè)連接。
再有一個(gè)目的是將事務(wù)程序存放于防火墻內(nèi)部而不必修改它們。
現(xiàn)參照附圖只通過(guò)例子描述本發(fā)明,附圖中圖1闡述用于實(shí)施本發(fā)明的常規(guī)網(wǎng)絡(luò)系統(tǒng)的框圖;圖2闡述用于實(shí)施本發(fā)明的代表性硬件配置;圖3闡述根據(jù)優(yōu)選實(shí)施例的安全的網(wǎng)關(guān)接口(SGI)的框圖;以及圖4闡述先前在圖3中闡述的SGI的更詳細(xì)過(guò)程流程圖。
優(yōu)選實(shí)施例包括一個(gè)由計(jì)算機(jī)實(shí)施的方法,一個(gè)獨(dú)特地編程的計(jì)算機(jī)系統(tǒng)和一個(gè)存儲(chǔ)器,該存儲(chǔ)器所包括的詳細(xì)邏輯用于操作一個(gè)內(nèi)計(jì)算機(jī)系統(tǒng)以允許一個(gè)外部用戶/顧客啟動(dòng)一個(gè)使用內(nèi)部業(yè)務(wù)資源的特許業(yè)務(wù)事務(wù)而不破壞安全防火墻。
本發(fā)明實(shí)現(xiàn)于圖2中闡明的計(jì)算機(jī)系統(tǒng)上。計(jì)算機(jī)系統(tǒng)100包括中央處理單元(CPU)10,例如用于處理高速緩存15的IBM的PowerPC601或Intel的486微處理器,隨機(jī)存取存儲(chǔ)器(RAM)14,只讀存儲(chǔ)器16和非易失性RAM(NVRAM)32。由I/O適配器18控制的一個(gè)或更多盤(pán)20提供長(zhǎng)期存儲(chǔ)??刹捎闷渌煌鎯?chǔ)介質(zhì),包括帶,CD-ROM,和WORM驅(qū)動(dòng)器。也可提供可卸存儲(chǔ)介質(zhì)以存放數(shù)據(jù)或計(jì)算機(jī)過(guò)程指令。(IBM和Power PC是國(guó)際商業(yè)機(jī)器公司的注冊(cè)商標(biāo)和Intel是英特爾公司的注冊(cè)商標(biāo))。
合適的臺(tái)式機(jī)操作系統(tǒng),如Sun Solaris,微軟的Windows NT,IBM的OS/2或APPle的System 7中來(lái)自RAM14的指令和數(shù)據(jù)用于控制CPU10。因此臺(tái)式機(jī)由RAM14運(yùn)行。然而在優(yōu)選實(shí)施例中,IBM RISC System/6000運(yùn)行AIX操作系統(tǒng),它是IBM公司實(shí)現(xiàn)的UNIX操作系統(tǒng)。如前所描述的,熟悉技術(shù)的人明確地知道可利用其它硬件平臺(tái)和操作系統(tǒng)實(shí)施本發(fā)明。(Solaris是Sun微系統(tǒng)公司的注冊(cè)商標(biāo),Windows NT是微軟公司的注冊(cè)商標(biāo),System 7是蘋(píng)果計(jì)算機(jī)公司的注冊(cè)商標(biāo)及OS/2,RISC System/6000和AIX是IBM公司的注冊(cè)商標(biāo)。UNIX是在美國(guó)和其它國(guó)家內(nèi)唯一得到X/Open有限公司許可證的注冊(cè)商標(biāo))。
用戶通過(guò)由用戶接口適配器22控制的I/O設(shè)備(即用戶控制設(shè)備)與計(jì)算機(jī)系統(tǒng)100通信。顯示器38向用戶顯示信息,而鍵盤(pán)24,指示設(shè)備26和揚(yáng)聲器28允許用戶操縱計(jì)算機(jī)系統(tǒng)。通信適配器34控制此計(jì)算機(jī)系統(tǒng)與其它連至網(wǎng)絡(luò)的處理單元間的通信。顯示適配器36控制此計(jì)算機(jī)系統(tǒng)和顯示器38之間的通信。
圖3闡明根據(jù)優(yōu)選實(shí)施例的安全的網(wǎng)關(guān)接口(SGI)的框圖和過(guò)程流。SGI位于一對(duì)服務(wù)器310和320上,每個(gè)服務(wù)器在計(jì)算機(jī)系統(tǒng)100上實(shí)施(見(jiàn)圖1)。外服務(wù)器310位于防火墻300之外,而內(nèi)服務(wù)器320位于防火墻300之內(nèi)。防火墻300利用任何合適的常規(guī)防火墻實(shí)施,該常規(guī)防火墻阻止外部事務(wù)通過(guò)它進(jìn)入內(nèi)服務(wù)器320。在優(yōu)選實(shí)施例中,防火墻300是一個(gè)網(wǎng)絡(luò)路由選擇器(如Cisco路由選擇器)。然而熟悉技術(shù)的人明確地知道防火墻300可位于內(nèi)服務(wù)器320內(nèi)部。
外服務(wù)器310管理與外部網(wǎng)絡(luò),例如INTERNET上的用戶/顧客的通信。然而熟悉技術(shù)的人知道可用任何類型的通信協(xié)議,例如任何公共或?qū)S镁W(wǎng)絡(luò)上的SNA或X.25。內(nèi)服務(wù)器320管理內(nèi)部網(wǎng)絡(luò)例如內(nèi)部集合信息網(wǎng)絡(luò)上內(nèi)部資源(如數(shù)據(jù)庫(kù)330)的通信。外服務(wù)器310執(zhí)行一個(gè)外守護(hù)程序312,而內(nèi)服務(wù)器320執(zhí)行一個(gè)內(nèi)守護(hù)程序322,從而允許跨過(guò)防火墻300進(jìn)行通信。守護(hù)程序是一個(gè)長(zhǎng)期運(yùn)行的計(jì)算機(jī)程序,它等待外部事件并當(dāng)任何時(shí)候發(fā)生這些事件時(shí)執(zhí)行一系列預(yù)定動(dòng)作。守護(hù)程序偵聽(tīng)服務(wù)請(qǐng)求并在被請(qǐng)求時(shí)完成這些請(qǐng)求。外服務(wù)器310也執(zhí)行守護(hù)程序314,后者偵聽(tīng)來(lái)自外部網(wǎng)絡(luò)的服務(wù)請(qǐng)求。內(nèi)服務(wù)器320包括用于執(zhí)行所需內(nèi)部事務(wù)的服務(wù)程序324。服務(wù)程序324和內(nèi)數(shù)據(jù)庫(kù)330代表一套實(shí)施業(yè)務(wù)事務(wù)的計(jì)算機(jī)程序(此處將更詳細(xì)地描述)。
圖4闡明圖3中先前闡明的SGI的更詳細(xì)的過(guò)程流。外服務(wù)器310包括任何合適的常規(guī)通信協(xié)議守護(hù)程序314,cgi-bin 415,sgi_client子程序416,和外守護(hù)程序312。外守護(hù)程序312包括用于與sgi_client子程序416和內(nèi)守護(hù)程序322通信的客戶/服務(wù)器軟件。sgi_client子程序416包括用于與外守護(hù)程序312通信的客戶/服務(wù)器軟件。Cgi_bin415是一個(gè)由守護(hù)程序314執(zhí)行的軟件的目錄。具體地說(shuō),在此例中cgi-bin 415包括的example.pl 462是一個(gè)用于與sgi_client子程序416通信的特殊程序原本(此處將更詳細(xì)地描述)。在優(yōu)選實(shí)施例中,守護(hù)程序314是一個(gè)常規(guī)超文本傳送協(xié)議守護(hù)器(httpd)(一般也稱為web服務(wù)器)。
內(nèi)服務(wù)器320包括內(nèi)守護(hù)程序322,服務(wù)程序324,和cgi-bin 426。服務(wù)程序324與外守護(hù)程序312和內(nèi)守護(hù)程序322通信,同時(shí)執(zhí)行cgi-bin子程序(例如example.pl 480)。在此例中,example.pl 480與內(nèi)部集合數(shù)據(jù)庫(kù)(例如圖3中的集合數(shù)據(jù)庫(kù)330)通信以便授權(quán)給用戶/顧客并執(zhí)行業(yè)務(wù)事務(wù)。
在顧客/用戶能成功地在410處請(qǐng)求一個(gè)事務(wù)之前,內(nèi)服務(wù)器320與外服務(wù)器310必須恰當(dāng)?shù)剡B接。為此,外操作系統(tǒng)執(zhí)行外守護(hù)程序312,對(duì)它標(biāo)識(shí)一個(gè)通信端口和位于外服務(wù)器310上文件系統(tǒng)(未示出)中的密碼文件的位置。接下來(lái),對(duì)守護(hù)程序312自密碼文件中讀取一個(gè)八字符密碼,在所標(biāo)識(shí)的通信端口處建立一個(gè)插口并在該插口處偵聽(tīng)來(lái)自內(nèi)守護(hù)程序322的連接調(diào)用。因此外守護(hù)程序312擔(dān)當(dāng)服務(wù)器的角度并在430處等待來(lái)自內(nèi)守護(hù)程序322的連接調(diào)用,而后者擔(dān)當(dāng)客戶的角色。此外,外守護(hù)程序312在第二端口(守護(hù)程序312的通信端口加1)上建立一個(gè)插口并在432處等待來(lái)自sgi_client子程序416的連接要求(此處將更詳細(xì)地描述)。
內(nèi)操作系統(tǒng)執(zhí)行內(nèi)守護(hù)程序322,對(duì)它標(biāo)識(shí)一個(gè)用于將內(nèi)守護(hù)程序322連至外守護(hù)程序312的通信端口,外服務(wù)器310的宿主名稱,位于內(nèi)服務(wù)器320中文件系統(tǒng)(未示出)中的密碼文件位置和位于內(nèi)服務(wù)器320上文件系統(tǒng)(未示出)中的有效服務(wù)文件位置。接下來(lái),內(nèi)守護(hù)程序322自密碼文件中讀取一個(gè)八字符密碼,讀取服務(wù)文件并在存儲(chǔ)器中存放一個(gè)有效服務(wù)表,在標(biāo)識(shí)的通信端口上建立一個(gè)插口,及最后在450處生成一個(gè)在430處偵聽(tīng)的跨過(guò)防火墻300對(duì)外守護(hù)程序312的標(biāo)準(zhǔn)連接調(diào)用。因?yàn)檫B接是由內(nèi)服務(wù)器所啟動(dòng)的,所以防火墻300允許該連接。
在內(nèi)守護(hù)程序322與外守護(hù)程序312連接以后,內(nèi)守護(hù)程序322與外守護(hù)程序312必須彼此恰當(dāng)?shù)卣J(rèn)證。為此,內(nèi)守護(hù)程序322向內(nèi)操作系統(tǒng)啟動(dòng)一個(gè)調(diào)用以檢索當(dāng)前時(shí)標(biāo),將該時(shí)標(biāo)發(fā)送至外守護(hù)程序312并等待回答的認(rèn)證串。外守護(hù)程序312接收時(shí)標(biāo)并將其八字符密碼與由內(nèi)守護(hù)程序322提供的時(shí)標(biāo)攪拌(改變,下面將描述)以建立認(rèn)證串,用標(biāo)準(zhǔn)UNIX加密命令(或任何合適的加密算法,如DES)將此攪拌的字符串加密,然后在431處將所得認(rèn)證串送至內(nèi)守護(hù)程序322。下列C語(yǔ)言碼闡述將八字符密碼與時(shí)標(biāo)攪拌的過(guò)程。此“create-auth”碼需要三個(gè)參量第一個(gè)是時(shí)標(biāo)(即auth_time),第二個(gè)是密碼(即“cred”,它是指向密碼的指針),及第三個(gè)是用以存放所生成的認(rèn)證串的緩存<pre listing-type="program-listing"><![CDATA[int create_auth(time_t,char*cred,char*p){charbuf[9]; /*暫時(shí)緩存*/inti; bzero (buf,sizeof(buf));/*清緩存*/ strcpy (buf,cred); /*將口令裝入緩存*/ /*破壞緩存中的每個(gè)字符*/ for(i=0;i<8;i++){ buf[i]^=(auth_time&0177);/*邏輯“與”時(shí)間標(biāo)記, 然后與緩存中的每個(gè)字 符進(jìn)行異或;每個(gè)循環(huán) 修改時(shí)間標(biāo)記*/ auth time>>=4; /*移位時(shí)間標(biāo)記 { for(i=0;i<8;i++) if(buf[i]=0) /*因?yàn)橛行ё址荒芎锌兆址?,將所有 ? 空字符改為1*/ buf[i]=1; strcpy(p,crpyt(buf,“aa”)+2);/*對(duì)于密鑰利用aa加密緩存*/ /*跳過(guò)加密結(jié)果的前兩個(gè)字符(是 密鑰aa)*/ /*將加密結(jié)果復(fù)制到P所指的用 戶應(yīng)用緩存*/ return 0; }]]></pre>同樣地內(nèi)守護(hù)程序322將其密碼與時(shí)標(biāo)攪拌,將它加密并將它與由外守護(hù)程序312提供的認(rèn)證串比較。如兩個(gè)認(rèn)證串相匹配,則執(zhí)行逆過(guò)程,類似地由外守護(hù)程序312認(rèn)證內(nèi)守護(hù)程序322(也即,自外操作系統(tǒng)中獲取一個(gè)新時(shí)標(biāo),將該時(shí)標(biāo)傳送至內(nèi)守護(hù)程序322,內(nèi)守護(hù)程序322將其密碼與新時(shí)標(biāo)攪拌,將它加密,及將它送回至外守護(hù)程序312以供驗(yàn)證之用)。
此認(rèn)證過(guò)程使用一個(gè)外部和內(nèi)部守護(hù)程序312和322雙方都知道的八字符密碼,一個(gè)用時(shí)標(biāo)隨機(jī)化的字符攪拌功能和一個(gè)加密過(guò)程。由于此攪拌功能,上述過(guò)程為每次認(rèn)證和每個(gè)事務(wù)產(chǎn)生不同的加密認(rèn)證串。這顯著地減少了它遭受襲擊的可能性,因?yàn)榕既猾@取到的認(rèn)證串對(duì)隨后的事務(wù)是無(wú)用的。
在內(nèi)守護(hù)程序322和外守護(hù)程序312已彼此認(rèn)證之后,先前擔(dān)當(dāng)客戶角色的內(nèi)守護(hù)程序322現(xiàn)擔(dān)當(dāng)服務(wù)器角度,在452處等待外守護(hù)程序312在453處提供一個(gè)服務(wù)串。外守護(hù)程序312在標(biāo)識(shí)的第二端口上建立另一個(gè)插口并在432處等待(偵聽(tīng))來(lái)自sgi_client子程序416的連接要求。因此,外守護(hù)程序312擔(dān)當(dāng)雙重角度對(duì)于內(nèi)守護(hù)程序322講是偽客戶(在它們之間傳送信息)而對(duì)sgi_client子程序416講是服務(wù)器。
守護(hù)程序314現(xiàn)準(zhǔn)備接收顧客請(qǐng)求410。例如,顧客請(qǐng)求可以是一個(gè)在特定期貨或現(xiàn)鈔市場(chǎng)上購(gòu)買(mǎi)研究信息的事務(wù)。在410處,顧客決定通過(guò)在其中正運(yùn)行著http客戶應(yīng)用程序用戶接口的顧客系統(tǒng)上點(diǎn)擊特定圖標(biāo)或加亮句,而執(zhí)行下列事務(wù)請(qǐng)求http//external_server/cgi-bin/example.pl?stock1+stock2該http客戶用戶接口通常向用戶要求詳細(xì)的事務(wù)信息(如哪一個(gè)期貨或現(xiàn)鈔市場(chǎng)),還有交費(fèi)信息(如信用卡號(hào))。如所請(qǐng)求的服務(wù)只向特許用戶提供,則還要求用戶輸入他或她的用戶識(shí)別碼和密碼。
傳送的用戶輸入格式?jīng)Q定于用于實(shí)施事務(wù)的超文本標(biāo)志語(yǔ)言(HTML)形式的類型。有兩種常規(guī)HTML形式一種“GET”形式將全部用戶輸入置于命令行中。因此,stock1,stock2和任何其它用戶輸入都成為命令行的一部分.../cgi-bin/example.pl?stock1+stock2+chargecardnumber+expdate然而由于命令行應(yīng)以純凈文本形式傳送過(guò)網(wǎng)絡(luò),所以不希望將顧客的付費(fèi)卡號(hào)和失效日期傳送過(guò)網(wǎng)絡(luò)。因此使用加密的“PUT”類型的HTML形式以便將付費(fèi)卡號(hào)和失效日期安全地送過(guò)網(wǎng)絡(luò)。在提供所有這些信息后,http客戶應(yīng)用程序通過(guò)http將請(qǐng)求送至外服務(wù)器310的410處。
在460處,守護(hù)程序314根據(jù)大家知道的安裝的HTTP認(rèn)證技術(shù)認(rèn)證顧客密碼(例如用標(biāo)準(zhǔn)UNIX加密命令將顧客密碼加密并將結(jié)果與位于守護(hù)程序314中的http密碼文件中的密碼項(xiàng)目相比較)。在461處,如用戶識(shí)別碼和密碼是合法的,則守護(hù)程序314識(shí)別“PUT”形式,自動(dòng)將字符流解密及建立一個(gè)合適UNIX過(guò)程環(huán)境。守護(hù)程序314包含一個(gè)眾所周知的常規(guī)http配置文件(未示出),用于建立一個(gè)標(biāo)準(zhǔn)過(guò)程環(huán)境,包括PATH,USERNAME,LOGNAME和AUTHTYPE變量。然后,httpsvc 470在471處重建此過(guò)程環(huán)境(此處將描述)。一旦建立過(guò)程環(huán)境后,守護(hù)程序314執(zhí)行example.pl 462(它應(yīng)位于cgi-bin 415中),向它傳送任何所需參量(如stock1和stock2)和向example.pl 462的標(biāo)準(zhǔn)輸入流傳送用戶輸入。
假定example.pl 462的確位于cgi-bin中,如不存在防火墻300,則example.pl 462將與內(nèi)數(shù)據(jù)庫(kù)330直接通信(見(jiàn)圖3)并完成所需事務(wù)。然而,由于的確存在著防火墻300并且它阻止example.pl 462直接與內(nèi)數(shù)據(jù)庫(kù)330通信,所以example.pl不是實(shí)際的事務(wù)程序。相反地,實(shí)際事務(wù)程序是位于cgi-bin 426內(nèi)在防火墻300內(nèi)部的example.pl 480。因此,cgi-bin 415包含“特殊”程序原本(例如example.pl 462),執(zhí)行它時(shí)所用命令是用于執(zhí)行位于cgi-bin 426中的實(shí)際事務(wù)程序時(shí)的同一命令。另一替代方案是,當(dāng)外服務(wù)器310提供許多服務(wù)及它們中的每一個(gè)服務(wù)要求一個(gè)“特殊”程序原本以便用同一方式調(diào)用sgi_client子程序416時(shí),example.pl 462可能是與位于cgi-bin 415內(nèi)的單個(gè)程序原本相連的符號(hào)鏈(即間接文件名稱引用)。重要的是顧客可用的請(qǐng)求限于程序原本和分別位于cgi-bin 415和cgi-bin 426中的相應(yīng)事務(wù)性程序。
程序原本example.pl 462將自守護(hù)程序314送給它的所有參量都置于過(guò)程環(huán)境(例如SGIARG1=stock1;SGIARG2=stock2)中,將其名稱(賴以調(diào)用的名稱,此例中為example.pl)置于過(guò)程環(huán)境(例如SGICMD=example.pl)中,執(zhí)行一個(gè)UNIX env命令(它將過(guò)程環(huán)境變量轉(zhuǎn)儲(chǔ))并最后將全部過(guò)程環(huán)境變量置入頭部串中。例如,頭部串看起來(lái)如下<pre listing-type="program-listing"><![CDATA[“PATH=/bin/Usr/bin\nAUTHTYPE=PEM\nUSERNAME =John Doe\nSGIARG1=stock1\nSGIARG2=stock2\ =nSGICMD=example.pl”。]]></pre>其次,在463處,程序原本example.pl 462調(diào)用外操作系統(tǒng)以檢索指定的第二端口(守護(hù)程序312通信端口加1),執(zhí)行sgi_client子程序416,向它傳送所請(qǐng)求服務(wù)的類型(例如httpsvc),指定的第二端口,外服務(wù)器宿主名稱,頭部串,和顧客的用戶識(shí)別碼。example.pl 462也將任何標(biāo)準(zhǔn)輸入字符流(例如用戶輸入的文本)作為標(biāo)準(zhǔn)輸入傳送至sgi_client子程序416。接著,example.pl 462在469處將自sgi_client子程序416接收的任何輸出量送至守護(hù)程序314。
當(dāng)sgi-client子程序在463處使用傳送給它的信息運(yùn)行時(shí),sgi_client子程序416建立一個(gè)與外守護(hù)程序312的認(rèn)證的連接。為此,在417處sgi_client子程序416自位于外服務(wù)器310上的私有客戶密碼文件(未示出)中讀取一個(gè)八字符密碼并在指定的第二端口處建立與外守護(hù)程序312的連接,它在432處偵聽(tīng)來(lái)自第二插口的連接。在433處,外守護(hù)程序312建立一個(gè)它本身的復(fù)制程序并執(zhí)行它(例如一個(gè)UNIX過(guò)程分叉)。父過(guò)程將插口連接給予子過(guò)程并回至430偵聽(tīng)來(lái)自內(nèi)守護(hù)程序322的另一個(gè)調(diào)用。
在434處,子過(guò)程認(rèn)證sgi_client子程序416。為此,外守護(hù)程序312也自位于外服務(wù)器310上的私有客戶密碼文件(未示出)中讀取一個(gè)八字符密碼。外守護(hù)程序312向外操作系統(tǒng)啟動(dòng)一個(gè)調(diào)用以檢索一個(gè)當(dāng)前時(shí)標(biāo),在432處將時(shí)標(biāo)傳送至sgi_client子程序416及等待回答的認(rèn)證串。sgi_client子程序416接收時(shí)標(biāo)及將其八字符密碼與由外守護(hù)程序312提供的時(shí)標(biāo)攪拌以建立一個(gè)認(rèn)證串,用標(biāo)準(zhǔn)UNIX加密命令將此攪拌的字符串加密,然后在434處將所得認(rèn)證串傳送至外守護(hù)程序312。類似地外守護(hù)程序312將其密碼與時(shí)標(biāo)攪拌,將它加密,并將它與由sgi_client子程序416提供的認(rèn)證串相比較。如這兩個(gè)認(rèn)證串相匹配,則sgi_client子程序416即被認(rèn)證。
在419處,如認(rèn)證成功,則sgi-Client子程序416將請(qǐng)求的服務(wù)的類型傳送至外守護(hù)程序312。在此例中,sgi_client子程序416總是請(qǐng)求一個(gè)HTTP服務(wù),因?yàn)閟gi-client子程序416是由HTTP守護(hù)程序314所間接調(diào)用的。先前該特殊程序原本(例如example.pl 462)使用一個(gè)標(biāo)明請(qǐng)求的服務(wù)是“httpsvc”的參量執(zhí)行sgi_client子程序416。接下來(lái)外守護(hù)程序312在435處將“httpsvc”服務(wù)請(qǐng)求傳送至內(nèi)守護(hù)程序322。
在452處,內(nèi)守護(hù)程序322等待自外守護(hù)程序312接收的服務(wù)請(qǐng)求。在453處,內(nèi)守護(hù)程序322接收來(lái)自外守護(hù)程序312的服務(wù)請(qǐng)求,建立它本身的復(fù)制映象并執(zhí)行它(例如UNIX過(guò)程分叉)。父過(guò)程將網(wǎng)絡(luò)插口連接給予子過(guò)程并回至450以啟動(dòng)對(duì)外守護(hù)程序312的另一個(gè)連接。在454處,子過(guò)程使用位于存儲(chǔ)器表中的有效可執(zhí)行服務(wù)(例如httpsvc)列表和到達(dá)這些服務(wù)的全目錄路徑來(lái)驗(yàn)證請(qǐng)求的服務(wù)。如請(qǐng)求的服務(wù)不在有效服務(wù)列表之內(nèi),則它將被否決。因此,即使一個(gè)未授權(quán)用戶能夠通過(guò)外守護(hù)程序312訪問(wèn)內(nèi)守護(hù)程序322,他/她也只能限于訪問(wèn)位于有效服務(wù)列表內(nèi)的服務(wù)。
如該服務(wù)請(qǐng)求有效,則在455處內(nèi)守護(hù)程序322調(diào)用一個(gè)UNIX執(zhí)行命令執(zhí)行(即用新服務(wù)程序覆蓋它本身而執(zhí)行)請(qǐng)求的服務(wù)并將網(wǎng)絡(luò)插口連接給予httpsvc 470。Httpsvc 470將一個(gè)附加環(huán)境變量加至作為外守護(hù)程序312名稱的過(guò)程環(huán)境上。SGI加上附加的環(huán)境變量以便在需要時(shí)能由example.pl 480決定SGI執(zhí)行example.pl 480而不是http守護(hù)程序314。
附帶提一下,外守護(hù)程序312,內(nèi)守護(hù)程序322,sgi_client子程序416和httpsvc 470中每個(gè)都具有統(tǒng)計(jì)和錯(cuò)誤記錄文件。每個(gè)都具有查錯(cuò)和跟蹤參量,這些參量使不同數(shù)量的信息放于錯(cuò)誤和統(tǒng)計(jì)記錄文件中。此外,如跟蹤參量是由sgi_client子程序416設(shè)置的,則外守護(hù)程序312,內(nèi)守護(hù)程序322和httpsvc 470將全部在它們相應(yīng)的錯(cuò)誤記錄文件中跟蹤該具體事務(wù)而不必考慮初始執(zhí)行每個(gè)程序時(shí)如何將跟蹤設(shè)置的。
在436處,外守護(hù)程序312將先前建立的頭部傳送至服務(wù)程序324,后者在471處接收它。作為響應(yīng),服務(wù)程序324將頭部(它包含初始過(guò)程環(huán)境變量)釋義為variable=value串并重建在example.pl 462中定義的初始過(guò)程環(huán)境。服務(wù)程序324自頭部變量SGICMD=example.pl中確定cgi-bin 426中應(yīng)調(diào)用的合適程序,建立用于與example.pl 480通信的通信信道(例如管道),和在472處調(diào)用example.pl 480。在437處,外守護(hù)程序312將標(biāo)準(zhǔn)輸入字符流(例如文本)傳送至服務(wù)程序324。在473處,服務(wù)程序324將文本傳送至example.pl 480的標(biāo)準(zhǔn)輸入端。
在這點(diǎn)上,由于服務(wù)程序324在471處重建初始過(guò)程環(huán)境(它是初始地在462處建立的),所以example.pl 480相信它是由http守護(hù)程序314在472處執(zhí)行的,而不是SGI(雖然可選方案是它可確定SGI從由httpsvc 470加至頭部的附加環(huán)境變量中調(diào)用它的)。因此SGI對(duì)顧客和http守護(hù)程序314兩者都是透明的,及實(shí)際事務(wù)程序位于example.pl 480中。因此位于exam ple.pl 480中的http守護(hù)程序314和事務(wù)程序兩者都不必改變。
所有信息現(xiàn)已齊全以供example.pl 480在481處執(zhí)行數(shù)據(jù)庫(kù)330上的內(nèi)部事務(wù)。一旦在481處完成事務(wù)(不論成功與否),事務(wù)的輸出即退回給顧客。在482處,example.pl 480自該事務(wù)接收輸出并將它輸送至服務(wù)程序324的管道474。在474處,服務(wù)程序324將輸出傳送至外守護(hù)程序312。在438處,外守護(hù)程序312將輸出傳送至sgi_client子程序416。在464處,sgi_client子程序416將輸出傳送至特殊程序原本example.pl 462。在465處,example.pl 462將輸出傳送至守護(hù)程序314。在466處,守護(hù)程序314將輸出傳送給顧客。
因此,一個(gè)由顧客啟動(dòng)的事務(wù)可自守護(hù)程序314安全地傳送至外守護(hù)程序312,自外守護(hù)程序312至內(nèi)守護(hù)程序322供在454處驗(yàn)證和在481處處理,最后在466處輸出退回給顧客。顧客請(qǐng)求和文本通過(guò)防火墻300可供內(nèi)部事務(wù)處理所使用,全部在SGI完全控制之下,但仍對(duì)顧客完全透明。因?yàn)閮?nèi)守護(hù)程序322在451處完成認(rèn)證,嚴(yán)格地迫使服務(wù)在454處供外部網(wǎng)絡(luò)使用,及可選地在481處完成用戶認(rèn)證,外服務(wù)器310的妥協(xié)帶來(lái)非常小的內(nèi)部安全風(fēng)險(xiǎn)而根本不會(huì)造成內(nèi)部網(wǎng)絡(luò)的妥協(xié)。
使用此具體實(shí)施例,現(xiàn)有http服務(wù)器能實(shí)施SGI而只需對(duì)現(xiàn)有cgi-bin命令做很少或不做修改。SGI是完全隱藏的,能自動(dòng)地支持即使復(fù)雜的http服務(wù)器。人們可以對(duì)現(xiàn)有http服務(wù)器做極少修改而為業(yè)務(wù)事務(wù)增加附加的安全和支持。因?yàn)橥獠烤W(wǎng)絡(luò)可用的事務(wù)(類似于example.pl的程序)限于分別位于cgi-bin 415和cgi-bin 426內(nèi)的程序原本和事務(wù)程序,又因?yàn)閮?nèi)服務(wù)器320正常時(shí)處于嚴(yán)格集合控制之下而不能輕易地被內(nèi)部開(kāi)發(fā)程序修改,因此SGI也使內(nèi)部開(kāi)發(fā)程序在沒(méi)有集合審查和同意的情況下難于將內(nèi)部事務(wù)供外部顧客使用。
雖然已參照本發(fā)明具體實(shí)施例顯示和描述了本發(fā)明,但熟悉技術(shù)的人知道可在不背離只由下列權(quán)利要求書(shū)定義的本發(fā)明實(shí)質(zhì)和范圍的情況下對(duì)它在形式和細(xì)節(jié)上進(jìn)行前述和其它修改。例如,一個(gè)可替代的實(shí)施例將sgi_client子程序416和外守護(hù)程序的功能包括在守護(hù)程序314內(nèi)。這將能提供更好性能,但將使httpd實(shí)施成為獨(dú)占及對(duì)它的改進(jìn)難于實(shí)現(xiàn)。
權(quán)利要求
1.一種用于操縱內(nèi)計(jì)算機(jī)系統(tǒng)(320)以允許外計(jì)算機(jī)系統(tǒng)(310)啟動(dòng)一個(gè)使用內(nèi)部資源(330)的事務(wù)請(qǐng)求(2)而不破壞內(nèi)計(jì)算機(jī)系統(tǒng)和外計(jì)算機(jī)系統(tǒng)間的安全防火墻(300)的方法,包括以下步驟認(rèn)證(451)由內(nèi)計(jì)算機(jī)系統(tǒng)啟動(dòng)的內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)之間的連接,從而建立一條認(rèn)證的連接;由外計(jì)算機(jī)系統(tǒng)調(diào)用(461)一個(gè)外計(jì)算機(jī)系統(tǒng)收到的事務(wù)請(qǐng)求;由外計(jì)算機(jī)系統(tǒng)對(duì)事務(wù)請(qǐng)求的調(diào)用作出響應(yīng),建立一個(gè)包含過(guò)程環(huán)境變量的初始過(guò)程環(huán)境,及建立一個(gè)包括事務(wù)請(qǐng)求和用于執(zhí)行該事務(wù)請(qǐng)求的過(guò)程環(huán)境變量的串;由外計(jì)算機(jī)系統(tǒng)通過(guò)認(rèn)證的連接傳送(435,436,437)串至內(nèi)計(jì)算機(jī)系統(tǒng);由內(nèi)計(jì)算機(jī)系統(tǒng)驗(yàn)證(454)該事務(wù)請(qǐng)求;由內(nèi)計(jì)算機(jī)系統(tǒng)重建(471)初始過(guò)程環(huán)境;以及由內(nèi)計(jì)算機(jī)系統(tǒng)執(zhí)行(472)該事務(wù)請(qǐng)求,從而生成(482)一個(gè)輸出。
2.如權(quán)利要求1中所要求的方法,還包括以下步驟(a)由外計(jì)算機(jī)系統(tǒng)(310)讀取第一密碼和第一通信端口;(b)由外計(jì)算機(jī)系統(tǒng)在第一通信端口處建立第一插口并在該第一插口處偵聽(tīng)來(lái)自內(nèi)計(jì)算機(jī)系統(tǒng)(320)的連接調(diào)用;(c)由內(nèi)計(jì)算機(jī)系統(tǒng)讀取第二密碼和第二通信端口;以及(d)由內(nèi)計(jì)算機(jī)系統(tǒng)在第二通信端口處建立第二插口并通過(guò)第二插口發(fā)送一個(gè)連接調(diào)用至外計(jì)算機(jī)系統(tǒng),從而建立一個(gè)連接。
3.如權(quán)利要求1中所要求的方法,其中認(rèn)證步驟包括以下步驟(e)由內(nèi)計(jì)算機(jī)系統(tǒng)(320)通過(guò)第二插口發(fā)送獨(dú)特的時(shí)標(biāo)至外系統(tǒng)(310);(f)由外計(jì)算機(jī)系統(tǒng)將第一密碼與收到的時(shí)標(biāo)攪拌;(g)用加密算法將攪拌的第一密碼加密,從而建立第一密碼串;(h)由外計(jì)算機(jī)系統(tǒng)傳送第一密碼串至內(nèi)計(jì)算機(jī)系統(tǒng);(i)由內(nèi)計(jì)算機(jī)系統(tǒng)使用第二密碼重復(fù)步驟(f)至(g),從而建立第二密碼串;以及(j)由內(nèi)計(jì)算機(jī)系統(tǒng)將第一密碼串與第二密碼串進(jìn)行比較。
4.如權(quán)利要求3中所要求的方法,其中攪拌步驟包括以下步驟將時(shí)標(biāo)與十六進(jìn)制數(shù)0177進(jìn)行邏輯“與”運(yùn)算以產(chǎn)生一個(gè)獨(dú)特結(jié)果;以及將該獨(dú)特結(jié)果與第一密碼的每個(gè)字符進(jìn)行邏輯“異”運(yùn)算從而產(chǎn)生攪拌的第一密碼。
5.如權(quán)利要求3中所要求的方法,其中加密步驟包括以下步驟用關(guān)鍵碼將攪拌的第二密碼中每個(gè)字符加密,從而建立密碼串。
6.如權(quán)利要求1中所要求的方法,其中調(diào)用步驟包括以下步驟由外部網(wǎng)絡(luò)發(fā)送事務(wù)請(qǐng)求(2)至外計(jì)算機(jī)系統(tǒng)(310),其中該事務(wù)請(qǐng)求包含輸入的數(shù)據(jù),參量,和一條用于執(zhí)行事務(wù)程序的命令;以及對(duì)外計(jì)算機(jī)系統(tǒng)收到的事務(wù)請(qǐng)求作出響應(yīng),由第一守護(hù)程序確定包含過(guò)程環(huán)境變量的過(guò)程環(huán)境。
7.如權(quán)利要求6中所要求的方法,還包括以下步驟對(duì)由外計(jì)算機(jī)系統(tǒng)(310)調(diào)用的事務(wù)請(qǐng)求(2)作出響應(yīng),調(diào)用該命令;對(duì)命令的調(diào)用作出響應(yīng),執(zhí)行程序原本,向它傳送用戶輸入數(shù)據(jù),參量和事務(wù)請(qǐng)求;以及由程序原本建立串,其中該串包括命令,參量和用于執(zhí)行該事務(wù)請(qǐng)求的環(huán)境變量。
8.如權(quán)利要求7中所要求的方法,還包括以下步驟由程序原本調(diào)用一個(gè)位于外計(jì)算機(jī)系統(tǒng)(310)上的客戶子程序,將用戶輸入數(shù)據(jù),用于連接至位于外計(jì)算機(jī)系統(tǒng)上的第二守護(hù)程序的第三通信端口,用于標(biāo)識(shí)事務(wù)請(qǐng)求(2)類型的標(biāo)識(shí)符和該串傳送給它。
9.如權(quán)利要求8中所要求的方法,還包括以下步驟由第二守護(hù)程序?qū)τ沙绦蛟臼盏降恼{(diào)用作出響應(yīng),認(rèn)證該客戶子程序;由第二守護(hù)程序執(zhí)行分叉操作,將第三插口連接傳送至子過(guò)程,以便父過(guò)程在第一插口連接處偵聽(tīng)來(lái)自內(nèi)計(jì)算機(jī)系統(tǒng)的調(diào)用;以及由子過(guò)程對(duì)客戶子程序的認(rèn)證作出響應(yīng),傳送事務(wù)請(qǐng)求類型至位于內(nèi)計(jì)算機(jī)系統(tǒng)上的第三守護(hù)程序。
10.如權(quán)利要求1中所要求的方法,其中驗(yàn)證步驟包括以下步驟由第三守護(hù)程序讀取外計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中存放的一個(gè)有效服務(wù)表;以及將自子過(guò)程收到的事務(wù)請(qǐng)求類型與有效服務(wù)表相比較,其中如在有效服務(wù)表中找到該類型,則事務(wù)請(qǐng)求得到驗(yàn)證。
11.一種用于操縱內(nèi)計(jì)算機(jī)系統(tǒng)(320)以允許外計(jì)算機(jī)系統(tǒng)(310)啟動(dòng)一個(gè)使用內(nèi)部資源(330)的事務(wù)請(qǐng)求(2)而不破壞內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)之間的安全防火墻(300)的獨(dú)特地編程的系統(tǒng),包括用于認(rèn)證一個(gè)由內(nèi)計(jì)算機(jī)系統(tǒng)啟動(dòng)的內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)間的連接從而建立一個(gè)認(rèn)證的連接的裝置;外計(jì)算機(jī)系統(tǒng)用于調(diào)用外計(jì)算機(jī)系統(tǒng)收到的事務(wù)請(qǐng)求的裝置;外計(jì)算機(jī)系統(tǒng)用于對(duì)事務(wù)請(qǐng)求的調(diào)用作出響應(yīng),建立一個(gè)包含過(guò)程環(huán)境變量的初始過(guò)程環(huán)境的裝置,及用于建立一個(gè)包括事務(wù)請(qǐng)求、參量和用于執(zhí)行事務(wù)請(qǐng)求的過(guò)程環(huán)境變量的串的裝置;外計(jì)算機(jī)系統(tǒng)用于通過(guò)認(rèn)證的連接傳送串至內(nèi)計(jì)算機(jī)系統(tǒng)的裝置;內(nèi)計(jì)算機(jī)系統(tǒng)用于驗(yàn)證事務(wù)請(qǐng)求的裝置;內(nèi)計(jì)算機(jī)系統(tǒng)用于重建初始過(guò)程環(huán)境的裝置;以及內(nèi)計(jì)算機(jī)系統(tǒng)用于執(zhí)行事務(wù)請(qǐng)示從而產(chǎn)生輸出的裝置。
12.一種制造產(chǎn)品,包括一種在其中收錄了計(jì)算機(jī)可讀程序碼工具的計(jì)算機(jī)可用介質(zhì),用于使內(nèi)計(jì)算機(jī)系統(tǒng)允許外計(jì)算機(jī)系統(tǒng)啟動(dòng)一個(gè)使用內(nèi)部資源的事務(wù)請(qǐng)求而不破壞內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)之間的安全防火墻,所述制造產(chǎn)品中的計(jì)算機(jī)可讀程序碼工具包括用于認(rèn)證由內(nèi)計(jì)算機(jī)系統(tǒng)啟動(dòng)的在內(nèi)計(jì)算機(jī)系統(tǒng)與外計(jì)算機(jī)系統(tǒng)間的連接從而建立一個(gè)認(rèn)證的連接的計(jì)算機(jī)可讀程序工具;外計(jì)算機(jī)系統(tǒng)用于調(diào)用外計(jì)算機(jī)系統(tǒng)收到的事務(wù)請(qǐng)求的計(jì)算機(jī)可讀程序工具;外計(jì)算機(jī)系統(tǒng)用于對(duì)事務(wù)請(qǐng)求的調(diào)用和作出響應(yīng),建立一個(gè)包含過(guò)程環(huán)境變量的初始過(guò)程環(huán)境的計(jì)算機(jī)可讀程序工具,及用于建立一個(gè)包括事務(wù)請(qǐng)求和用于執(zhí)行事務(wù)請(qǐng)求的過(guò)程環(huán)境變量的串的計(jì)算機(jī)可讀程序工具;外計(jì)算機(jī)系統(tǒng)用于通過(guò)認(rèn)證的連接傳送串至內(nèi)計(jì)算機(jī)系統(tǒng)的計(jì)算機(jī)可讀程序工具;內(nèi)計(jì)算機(jī)系統(tǒng)用于驗(yàn)證事務(wù)請(qǐng)求的計(jì)算機(jī)可讀程序工具;內(nèi)計(jì)算機(jī)系統(tǒng)用于重建初始過(guò)程環(huán)境的計(jì)算機(jī)可讀程序工具;以及內(nèi)計(jì)算機(jī)系統(tǒng)用于執(zhí)行事務(wù)請(qǐng)求從而生成輸出的計(jì)算機(jī)可讀程序工具。
全文摘要
允許外部網(wǎng)絡(luò)(310)顧客啟動(dòng)一個(gè)使用內(nèi)部網(wǎng)絡(luò)(320)上內(nèi)部業(yè)務(wù)資源(330)的特許業(yè)務(wù)事務(wù)而不破壞安全防火墻(300)的方法,包括認(rèn)證內(nèi)計(jì)算機(jī)系統(tǒng)(320)與外計(jì)算機(jī)系統(tǒng)(310)之間的連接;由外計(jì)算機(jī)系統(tǒng)調(diào)用所收到的事務(wù)請(qǐng)求(2),建立一個(gè)包括事務(wù)請(qǐng)求(2)、參量和用于執(zhí)行事務(wù)請(qǐng)求(2)的過(guò)程環(huán)境變量的串,向內(nèi)計(jì)算機(jī)系統(tǒng)傳送;由內(nèi)計(jì)算機(jī)系統(tǒng)驗(yàn)證事務(wù)請(qǐng)求(2),重建初始過(guò)程環(huán)境;執(zhí)行事務(wù)請(qǐng)求(2)從而產(chǎn)生輸出。
文檔編號(hào)G06F15/00GK1201573SQ96197998
公開(kāi)日1998年12月9日 申請(qǐng)日期1996年3月20日 優(yōu)先權(quán)日1995年10月31日
發(fā)明者羅伯特·塞西爾·戈?duì)? 約翰·弗雷德里克·霍 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司