이 저장소는 https://codeberg.org/hohlerde/netebics로 이동했습니다
비즈니스 온라인 뱅킹 용 EBICS 프로토콜을 구현하는 클라이언트 라이브러리입니다.
라이브러리는 .NET Core 2.X를 사용하여 C# (7.2)로 작성되었으며 Linux/Windows에서 개인/공개 키 (PEM 파일)로 테스트되었습니다.
Netebics는 알파 소프트웨어이며 생산에 사용해서는 안됩니다 . API/브레이킹 변경이 가능할 가능성이 높습니다.
Netebics는 다음 라이브러리에서 분노합니다.
Netebics는 의존성 주입을 사용하지 않습니다. 자세한 내용은 CSPROJ 파일을 참조하십시오.
현재 공식 Nuget 패키지가 없으므로이 저장소를 복제하여 직접 도서관을 구축해야합니다.
.NET Core SDK 버전 2 이상이 설치되어 있는지 확인하십시오.
저장소를 복제하십시오.
git clone https://github.com/hohlerde/NetEbics.git
도서관을 구축하십시오.
cd NetEbics
dotnet pack -c Release
Nuget 패키지는 bin/Release 아래에 있습니다.
라이브러리를 사용하려면 EBICS 프로토콜을 합리적으로 잘 이해해야합니다.
새로운 EBICS 사용자로서 가장 먼저하고 싶은 것은 공개 RSA 키를 은행에 발표하는 것입니다. 이 (인증, 서명 및 암호화 키)에 대해 3 개의 공개/개인 키 쌍을 만들어야합니다.
Bouncycastle에서는 키를 만드는 것이 쉽습니다.
var gen = GeneratorUtilities . GetKeyPairGenerator ( "RSA" ) ;
gen . Init ( new KeyGenerationParameters ( new SecureRandom ( ) , 4096 ) ) ;
var signKeyPair = gen . GenerateKeyPair ( ) ;
using ( TextWriter sw = new StreamWriter ( "sign.key" ) )
{
var pw = new PemWriter ( sw ) ;
pw . WriteObject ( signKeyPair ) ;
sw . Flush ( ) ;
}위의 코드를 조정하고 인증 ( "auth.key") 및 암호화 ( "Enc.Key") 키를 만듭니다.
공개 서명 키를 은행에 발표하십시오. 이전에 생성 된 키는 PEM 형식으로 저장되며 개인 및 공개 키가 포함되어 있습니다.
AsymmetricCipherKeyPair signKey ;
using ( var sr = new StringReader ( File . ReadAllText ( "sign.key" ) . Trim ( ) ) )
{
var pr = new PemReader ( sr ) ;
signKey = pr . ReadObject ( ) ;
}
var signCert = KeyUtils . CreateX509Certificate2 ( signKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID you got from your bank" ,
UserId = "Your user ID you got from your bank" ,
SignKeys = new SignKeyPair
{
Version = SignVersion . A005 , // only A005 is supported right now
TimeStamp = DateTime . Now ,
Certificate = signCert // internally we work with keys
}
}
} ) ;
var resp = c . INI ( new IniParams ( ) ) ;그 후 우리는 공개 인증 및 암호화 키를 발표해야합니다.
// loading of keys "auth.key" and "enc.key" omitted
var authCert = KeyUtils . CreateX509Certificate2 ( authKey ) ;
var encCert = KeyUtils . CreateX509Certificate2 ( encKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID" ,
UserId = "Your user ID" ,
AuthKeys = new AuthKeyPair
{
Version = AuthVersion . X002 ,
TimeStamp = DateTime . Now ,
Certificate = authCert
} ,
CryptKeys = new CryptKeyPair
{
Version = CryptVersion . E002 ,
TimeStamp = DateTime . Now ,
Certificate = encCert
}
}
} ) ;
var resp = c . HIA ( new HiaParams ( ) ) ;은행은 열쇠가 실제로 당신에게 속한지 확인해야하기 때문에 열쇠를 알리는 것만으로는 충분하지 않습니다. 이를 증명하려면 INI와 HIA 편지를 은행에 보내야합니다. 공개 키의 해시 값과 서명 서명이 포함되어 있습니다. EBICS 사양은이 문자가 어떻게 보이는지 자세히 설명합니다.
은행과 EBIC를 통해 통신하려면 은행의 공개 키가 필요합니다. 데이터 교환 된 데이터를 암호화하고 인증해야하기 때문입니다.
// loading of keys "auth.key" and "enc.key" omitted
var authCert = KeyUtils . CreateX509Certificate2 ( authKey ) ;
var encCert = KeyUtils . CreateX509Certificate2 ( encKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID" ,
UserId = "Your user ID" ,
AuthKeys = new AuthKeyPair
{
Version = AuthVersion . X002 ,
TimeStamp = DateTime . Now ,
Certificate = authCert
} ,
CryptKeys = new CryptKeyPair
{
Version = CryptVersion . E002 ,
TimeStamp = DateTime . Now ,
Certificate = encCert
}
}
} ) ;
var hpbResp = c . HPB ( new HpbParams ( ) ) ;
if ( hpbResp . TechnicalReturnCode != 0 || hpbResp . BusinessReturnCode != 0 )
{
// handle error
return ;
}
c . Config . Bank = resp . Bank ; // set bank's public keys
// now issue other commands // loading of keys "auth.key", "enc.key" and "sign.key" omitted
var authCert = KeyUtils . CreateX509Certificate2 ( authKey ) ;
var encCert = KeyUtils . CreateX509Certificate2 ( encKey ) ;
var signCert = KeyUtils . CreateX509Certificate2 ( signKey ) ;
var client = EbicsClient . Factory ( ) . Create ( new EbicsConfig
{
Address = "The EBICS URL you got from your bank, i.e. https://ebics-server.com/" ,
Insecure = true ,
TLS = true ,
User = new UserParams
{
HostId = "The host ID of your bank" ,
PartnerId = "Your partner ID" ,
UserId = "Your user ID" ,
AuthKeys = new AuthKeyPair
{
Version = AuthVersion . X002 ,
TimeStamp = DateTime . Now ,
Certificate = authCert
} ,
CryptKeys = new CryptKeyPair
{
Version = CryptVersion . E002 ,
TimeStamp = DateTime . Now ,
Certificate = encCert
} ,
SignKeys = new SignKeyPair
{
Version = SignVersion . A005 ,
TimeStamp = DateTime . Now ,
Certificate = signCert
}
}
} ) ;
var hpbResp = c . HPB ( new HpbParams ( ) ) ;
if ( hpbResp . TechnicalReturnCode != 0 || hpbResp . BusinessReturnCode != 0 )
{
// handle error
return ;
}
c . Config . Bank = resp . Bank ; // set bank's public keys
// create credit transfer data structure
var cctParams = new CctParams
{
InitiatingParty = "Your name" ,
PaymentInfos = new [ ]
{
new CreditTransferPaymentInfo
{
DebtorName = "Sender's name" ,
DebtorAccount = "Sender's IBAN" ,
DebtorAgent = "Sender's BIC" ,
ExecutionDate = "2018-05-15" ,
CreditTransferTransactionInfos = new [ ]
{
new CreditTransferTransactionInfo
{
Amount = "1.00" ,
CreditorName = "Receiver's name" ,
CreditorAccount = "Receiver's IBAN" ,
CreditorAgent = "Receiver's BIC" ,
CurrencyCode = "EUR" ,
EndToEndId = "something" ,
RemittanceInfo = "Unstructured information for receiver" ,
}
}
}
}
} ;
var cctResp = c . CCT ( cctParams ) ; ASP.NET 환경이없고 일부 로그 출력을보고 싶다면 예를 들어 Microsoft Extensions 로깅과 함께 Serilog를 활성화 할 수 있습니다.
Log . Logger = new LoggerConfiguration ( )
. WriteTo . Console ( )
. MinimumLevel . Debug ( )
. CreateLogger ( ) ;
EbicsLogging . MethodLoggingEnabled = true ; // see entry/exit messages in log
EbicsLogging . LoggerFactory . AddSerilog ( ) ; Serilog.Extensions.Logging 및 Serilog.Sinks.Console CSPROJ 파일의 Serilog를 사용하려면 참조해야합니다.
< ItemGroup >
< PackageReference Include = " Serilog.Extensions.Logging " Version = " 2.0.2 " />
< PackageReference Include = " Serilog.Sinks.Console " Version = " 3.1.2-dev-00771 " />
</ ItemGroup > ASP.NET 환경에서는 Depency Injection 컨테이너에서 Netebics로 얻는 LoggerFactory 인스턴스를 전달하면됩니다.
public MyController ( ILoggerFactory loggerFactory )
{
EbicsLogging . MethodLoggingEnabled = true ;
EbicsLogging . LoggerFactory = loggerFactory ;
}자세한 내용은 File License.txt를 참조하십시오.