2012-08-22 14 views
8

Ho un requisito in cui ho bisogno di inserire ID sicuro dal token RSA durante l'autenticazione di accesso e quindi avviare il test di automazione.È possibile accedere a RSA Secure Id a livello di programmazione per l'utilizzo in Test Automation?

È possibile accedere al valore del token RSA a livello di programmazione tramite qualsiasi api o in qualsiasi altro modo, in modo che il flusso di prova possa essere completamente automatizzato?

+0

Supponiamo che tu stia parlando di token RSA USB, un token sigillato implicherebbe una webcam e un OCR :) – ZJR

+0

@ZJR, Il client utilizza RSA SecurId 700. Suppongo che "RSA SecurId Token per Windows" possa fare clic su " Copia il pulsante "e prendi il valore negli appunti e leggilo da lì. Tuttavia dal momento che è un token devo pensare ad altre opzioni. Anche il fattore "expiry time" di un'autenticazione una tantum svolge un ruolo. Se qualsiasi API restituisce la chiave di sicurezza e il tempo residuo per la validità di securekey, sarà più utile per l'automazione del test. – parishodak

+0

Meglio mettere "webcam e OCR" come una vera risposta allora! A meno che non si riesca a convincerli a emettere un token non hardware per i propri scopi di test ... – bobince

risposta

-2

Un'idea è di registrare un gruppo di coppie orologio/token e di eseguire l'orologio indietro per il programma e riprodurre la registrazione. In realtà, se hai la possibilità di cucinare l'orologio, hai davvero bisogno solo di una coppia.

(non ho detto che era una buona idea.)

Buona fortuna, /Bob Bryan

+2

È necessario impostare l'orologio del server per verificare i token. Buona fortuna. – SLaks

+0

Grazie per i vostri suggerimenti. Non ho davvero pensato a questa soluzione. Ma temo di non poter fare i conti con l'ora del server: |, e in più l'accesso al server di autenticazione token sicuro è proibito, anche se voglio provarlo. – parishodak

1

È necessario specificare che tipo di Token che si usa.

Ci sono certo numero di scelte qui ho sentito parlare di:

  • token hardware
  • software applicativo del token (Mac OS, Windows, iOS, Android, Windows Mobile, e pochi altri) del browser
  • web Token

prega di consultare questo link per maggiori informazioni: http://www.emc.com/security/rsa-securid/rsa-securid-software-authenticators.htm#!offerings_for_web_browsers

Con il token hardware è necessario utilizzare un tipo di fotocamera e leggere i pixel dell'immagine scattata (non sarò in grado di aiutarti)

Il token software è più semplice.

Ho recentemente creato un piccolo strumento da riga di comando che è in grado di eseguire, immettere il PIN e leggere il passcode generato nell'applicazione token. Non posso inviarti lo strumento (proprietà della mia azienda), ma posso darti alcuni consigli su cosa devi fare per creare la tua applicazione che farà lo stesso.

Ma prima è necessario dirmi se si utilizza il token software o meno.


OK. Dato che hai un token software, descriverò ciò che la mia app fa per connettersi automaticamente alla VPN.

1) è necessario configurare il token software prima di procedere.
Inoltre, è necessario configurare anche il client VPN e la connessione deve essere elencata nell'elenco delle connessioni disponibili.
Quando è configurato, è possibile eseguire la connessione VPN automatica.
Abbiamo token software simile a questo:
https://ssl.seagate.com/ssl/docs/soft_token_install_instructions.html
sembra client VPN Il nostro sembra qualcosa di simile a questo:
http://wireless-setup.wsu.edu/msIPSEC.html

2) Una volta che tutti gli strumenti sono configurati è possibile avviare la connessione VPN.

Devi essere pronto a fare indagini approfondite.
I ragazzi della RSA hanno lavorato duramente per rendere impossibile ciò che stiamo facendo qui.
Non usano controlli ordinari. Hanno creato i propri controlli Non ho spec. per.

L'ho eseguito utilizzando le funzioni API C++ e WIN32. Questa è la mia ricetta

a) parametri di lettura passati al programma

b) validare i parametri Ho il numero di params come PIN, numero di connessione per stabilire, Command per eseguire quando viene stabilita la connessione ecc Essi possono essere codificato naturalmente, ma per essere flessibile posso passarli dalla riga di comando.

c) di controllo per l'applicazione del token [EnumWindows]
Token applicazione può avere 2 finestre di alto livello [quello di inserire il PIN, e l'uno con codice di accesso]
Se rilevo entrambe le finestre aperte chiudo l'app e riavvialo.
Puoi provare a inviare il messaggio WM_CLOSE per chiudere l'app. I simulare utenti azione di premere il tasto "X" vicino

//restore it <if minimized> 
SendMessage(hwndTokenApplicationPinWindow,WM_SYSCOMMAND,SC_RESTORE,NULL); 
//close the app 
SendMessage(hwndTokenApplicationPinWindow,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(223,14)); 
SendMessage(hwndTokenApplicationPinWindow, WM_LBUTTONUP,0,MAKELPARAM(223,14)); 

di avviarlo io uso CreateProcess funzione.
Quando si riavvia l'app o è stata aperta una sola finestra, è ora possibile immettere il PIN.

d) inserire il PIN

I simulare utenti lasciato cliccare sulla finestra pin WM_LBUTTONDOWN, WM_LBUTTONUP.
Inserisco il pin utilizzando WM_CHAR.
Una volta immesso, fare clic sul pulsante OK utilizzando WM_LBUTTONDOWN, WM_LBUTTONUP.
Una volta completato, si dovrebbe visualizzare la finestra Codice di accesso.

e) Leggi codice
Per ottenere il codice di accesso che uso pulsante Copia dal token. Questo pulsante Copia i dati negli appunti.
simuliamo premendo questo tasto: WM_LBUTTONDOWN, WM_LBUTTONUP
e leggere i dati dagli appunti:

BOOL InvalidData = FALSE; 
OpenClipboard(NULL); 
HANDLE clip0 = GetClipboardData(CF_UNICODETEXT); 
wchar_t* p=(wchar_t*)GlobalLock(clip0); 
if(wcslen(p) == MaxPasscodeSize-1) 
    wcscpy_s(currentPasscode,MaxPasscodeSize,p); 
else if(wcslen(p) != MaxPasscodeSize-1 && wcslen(p) != 0) 
{ 
    wprintf(L"Error: Passcode in clipboard is invalid\n"); 
    InvalidData = TRUE; 
} 
GlobalUnlock(clip0); 
CloseClipboard(); 

Ora avete codice di accesso pronto per essere utilizzato nel client Cisco VPN.
Per favore fatemi sapere se ha senso per voi.
Se lo fa, e la tua app funziona fino a questo punto, fammelo sapere e passerò le istruzioni per gestire il client VPN.

Se avete bisogno di istruzioni più dettagliate per i passaggi precedenti, fatemelo sapere.

+1

Per quanto ne so, il cliente ha entrambi i token software e hardware – parishodak

2

Abbiamo automatizzato il nostro login a una VPN che utilizza rsa id sicuro e Cisco AnyConnect, effettuando le seguenti operazioni:

1) Aprire rsa id sicuro programatically il modo in cui si desidera

2) Eseguire il seguente. ps1

#Source http://www.lazywinadmin.com/2010/06/powershell-get-clipboard-set-clipboard.html 
function Get-ClipBoard { 
Add-Type -AssemblyName System.Windows.Forms 
$tb = New-Object System.Windows.Forms.TextBox 
$tb.Multiline = $true 
$tb.Paste() 
$tb.Text 
} 
# end Source http://www.lazywinadmin.com/2010/06/powershell-get-clipboard-set-clipboard.html 

$wshell = New-Object -ComObject wscript.shell; 
$wshell.AppActivate('the name')#Here you need to write the name that appears on the left top corner of the rsa secure id window 
Sleep 1 
$wshell.SendKeys('{TAB}') 
$wshell.SendKeys('~') 
$a = Get-ClipBoard 


#Source http://www.cze.cz 
#This script is tested with "Cisco AnyConnect Secure Mobility Client version 3.0.5080″ 
#Please change following variables 

[string]$CiscoVPNHost = 'the vpn you are trying to connect' 
[string]$Login = 'your user' 
[string]$Password = $a 

#Please check if file exists on following paths 
[string]$vpncliAbsolutePath = 'C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpncli.exe' 
[string]$vpnuiAbsolutePath = 'C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe' 

#**************************************************************************** 
#**** Please do not modify code below unless you know what you are doing **** 
#**************************************************************************** 

Add-Type -AssemblyName System.Windows.Forms -ErrorAction Stop 

#Set foreground window function 
#This function is called in VPNConnect 
Add-Type @' 
using System; 
using System.Runtime.InteropServices; 
public class Win { 
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool SetForegroundWindow(IntPtr hWnd); 
} 
'@ -ErrorAction Stop 

#quickly start VPN 
#This function is called later in the code 
Function VPNConnect() 
{ 
Start-Process -FilePath $vpncliAbsolutePath -ArgumentList "connect $CiscoVPNHost" 
$counter = 0; $h = 0; 
while($counter++ -lt 1000 -and $h -eq 0) 
{ 
sleep -m 10 
$h = (Get-Process vpncli).MainWindowHandle 
} 
#if it takes more than 10 seconds then display message 
if($h -eq 0){echo "Could not start VPNUI it takes too long."} 
else{[void] [Win]::SetForegroundWindow($h)} 
} 

#Terminate all vpnui processes. 
Get-Process | ForEach-Object {if($_.ProcessName.ToLower() -eq "vpnui") 
{$Id = $_.Id; Stop-Process $Id; echo "Process vpnui with id: $Id was stopped"}} 
#Terminate all vpncli processes. 
Get-Process | ForEach-Object {if($_.ProcessName.ToLower() -eq "vpncli") 
{$Id = $_.Id; Stop-Process $Id; echo "Process vpncli with id: $Id was stopped"}} 

#Disconnect from VPN 
echo "Trying to terminate remaining vpn connections" 
start-Process -FilePath $vpncliAbsolutePath -ArgumentList 'disconnect' -wait 
#Connect to VPN 
echo "Connecting to VPN address '$CiscoVPNHost' as user '$Login'." 
VPNConnect 

#Write login and password 
[System.Windows.Forms.SendKeys]::SendWait("$Login{Enter}") 
[System.Windows.Forms.SendKeys]::SendWait("$Password{Enter}") 

#Start vpnui 
start-Process -FilePath $vpnuiAbsolutePath 
#Wait for keydown 
#echo "Press any key to continue …" 
#try{$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")}catch{} 
#Exit 

Tutto quello che dovete fare ora è quello di impostare la VPN, e l'utente sullo script di cui sopra.

+0

Nello script, è possibile trovare 2 fonti diverse. Usavamo lo script che può essere trovato qui: [link] (http://www.cze.cz), perché non abbiamo usato il token. Tuttavia, abbiamo iniziato a usarlo dopo un po ', quindi abbiamo dovuto aggiungere alcune righe allo script, in modo da poter continuare a usarlo. La soluzione è stata trovata qui: [link] (http://www.lazywinadmin.com/2010/06/powershell-get-clipboard-set-clipboard.html) e abbiamo aggiunto le linee necessarie per farlo funzionare. – JS5

Problemi correlati