我有,我需要登录验证过程中从RSA令牌进入安全ID,然后开始运行自动化测试的要求。
是否有可能通过任何API或其它任何方式编程方式访问RSA令牌值,使测试流程可以完全自动化?
我有,我需要登录验证过程中从RSA令牌进入安全ID,然后开始运行自动化测试的要求。
是否有可能通过任何API或其它任何方式编程方式访问RSA令牌值,使测试流程可以完全自动化?
我们的自动化我们的登录到使用RSA安全ID和思科的AnyConnect,通过执行以下一个VPN:
1)打开RSA安全ID编程你所希望的方式
2)运行以下的.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
所有你现在需要做的是设置你的VPN,以及用户在上面的脚本。
你需要指定类型的令牌时使用的。
有选择,我在这里听到的数字:
请检查此链接了解详情: http://www.emc.com/security/rsa-securid/rsa-securid-software-authenticators.htm#!offerings_for_web_browsers
随着硬件令牌,你需要使用某种类型的相机和读取拍摄的图像的像素(我不能帮你那里)
软件令牌是简单。
我最近创建小的命令行工具,它能够执行,输入PIN码,并读取标识应用程序生成的密码。 我不能给你的工具(我公司的财产),但我可以给你一些提示,你需要做的,创建自己的应用程序,它会做同样的东西是什么。
但首先你要告诉我你是否使用软件令牌或没有。
好。 既然你有软件令牌,我将介绍我的应用程序做自动连接到VPN什么。
1)你需要有之前做这个软件令牌配置。
对VPN客户端之上将需要还配置和连接必须可用连接列表中列出。
当它被配置,你可以做你的汽车VPN连接。
我们有类似这样的软件令牌:
https://ssl.seagate.com/ssl/docs/soft_token_install_instructions.html
我们的VPN客户端外表看起来是这样的一种:
http://wireless-setup.wsu.edu/msIPSEC.html
2)一旦所有工具都配置你就可以开始你的VPN连接。
你需要准备做深入调查。
从RSA球员很努力,使其不可能这是我们正在做的事情。
他们不使用普通的控制。 他们创造了他们自己的控件我没有为规范。
我一直在使用C ++和Win32 API函数来实现它。 这是我的食谱。
一个)读取传递给程序参数
B)验证我有一个像PIN PARAMS数量的参数,连接数的建立,当建立连接等,他们可以硬编码当然命令来运行,但要灵活,我可以从命令行传递它们。
c)检查令牌应用[EnumWindows的]
令牌的应用程序可以有2个顶级窗口[一个你输入PIN码,以及一个用密码]
如果我发现这两个窗口打开我关闭应用程序,并重新启动它。
你可以尝试发送消息WM_CLOSE关闭应用程序。 我模拟用户操作按“X”关闭按钮
//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));
要启动它,我用CreateProcess函数。
当您重新启动应用程序,或者你只有一个窗口中打开,你现在可以输入PIN码。
d)输入PIN
我模拟用户点击左侧脚窗口WM_LBUTTONDOWN,WM_LBUTTONUP。
我进入使用WM_CHAR针。
输入后,点击使用WM_LBUTTONDOWN,WM_LBUTTONUP OK按钮。
一旦完成,你应该有显示密码窗口。
E)读取密码
为了让我使用复制按钮从令牌密码。 此按钮将数据复制到剪贴板。
我们模拟按下此按钮:WM_LBUTTONDOWN,WM_LBUTTONUP
和读取剪贴板数据:
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();
现在你有密码准备在Cisco VPN客户端使用。
请让我知道,如果任何意义给你。
如果是这样,你您的应用程序的工作原理到这一点,请让我知道,我会通过指令来处理VPN客户端。
如果您需要更详细的指令上面的步骤,请让我知道。
一个想法是记录了一堆时钟/令牌对,运行的时钟回你的程序和重放录音。 其实,如果你有做饭的时钟选项,你真的只需要一对。
(我没有说这是一个好主意。)
祝你好运,/鲍勃·布莱恩