Dieses Repository ist auf https://codeeberg.org/hohlerde/netebics übergezogen
Dies ist eine Kundenbibliothek, die das EBICS -Protokoll für das Online -Banking für Business -Online -Banking implementiert.
Die Bibliothek ist in C# (7.2) mit .NET Core 2.x geschrieben und wurde mit privaten/öffentlichen Schlüssel (PEM -Dateien) unter Linux/Windows getestet.
Netebics ist Alpha -Software und sollte nicht für die Produktion verwendet werden . API/Breaking -Änderungen sind sehr wahrscheinlich.
Netebics ist in den folgenden Bibliotheken abhängig:
Netebics verwendet keine Abhängigkeitsinjektion. Weitere Informationen finden Sie in der CSPROJ -Datei.
Derzeit sind keine offiziellen Nuget -Pakete verfügbar, sodass Sie die Bibliothek selbst erstellen müssen, indem Sie dieses Repository klonen.
Stellen Sie sicher, dass die .NET Core SDK Version 2 oder höher installiert sind.
Klonen Sie das Repository.
git clone https://github.com/hohlerde/NetEbics.git
Bauen Sie die Bibliothek auf.
cd NetEbics
dotnet pack -c Release
Sie finden das Nuget -Paket unter bin/Release .
Um die Bibliothek zu verwenden, sollten Sie das EBICS -Protokoll ein vernünftiges Verständnis haben.
Das erste, was Sie als neuer EBICS -Benutzer tun möchten, ist, Ihre öffentlichen RSA -Schlüssel Ihrer Bank bekannt zu geben. Sie müssen drei öffentliche/private Schlüsselpaare dafür erstellen (Authentifizierung, Signatur und Verschlüsselungsschlüssel).
Das Erstellen der Schlüssel ist mit Bouncycastle einfach.
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 ( ) ;
}Passen Sie den obigen Code an und erstellen Sie auch eine Authentifizierung ("Auth.Key") und eine Taste ("Enc.Key").
Kündigen Sie Ihre öffentliche Signaturschlüssel für Ihre Bank an. Beachten Sie, dass die zuvor erzeugten Schlüssel im PEM -Format gespeichert sind und den privaten und öffentlichen Schlüssel enthalten.
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 ( ) ) ;Danach müssen wir die öffentlichen Authentifizierung und Verschlüsselungsschlüssel bekannt geben.
// 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 ( ) ) ;Die Ankündigung der Schlüssel reicht nicht aus, da die Bank sicher sein muss, dass die Schlüssel wirklich zu Ihnen gehören. Um dies zu beweisen, müssen Sie die INI- und HIA -Briefe an Ihre Bank senden. Sie enthalten Hash -Werte Ihrer öffentlichen Schlüssel und Ihrer schriftlichen Unterschrift. Die EBICS -Spezifikation beschreibt ausführlich, wie diese Buchstaben aussehen sollten.
Um über EBICs mit der Bank zu kommunizieren, benötigen Sie die öffentlichen Schlüssel der Bank, da die ausgetauschten Daten verschlüsselt und authentifiziert werden müssen.
// 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 ) ; Wenn Sie sich nicht in einer ASP.NET -Umgebung befinden und eine Protokollausgabe sehen möchten, können Sie beispielsweise Serilog zusammen mit der Protokollierung von Microsoft Extensions aktivieren.
Log . Logger = new LoggerConfiguration ( )
. WriteTo . Console ( )
. MinimumLevel . Debug ( )
. CreateLogger ( ) ;
EbicsLogging . MethodLoggingEnabled = true ; // see entry/exit messages in log
EbicsLogging . LoggerFactory . AddSerilog ( ) ; Sie müssen Serilog.Extensions.Logging und Serilog.Sinks.Console in Ihrer CSPROJ -Datei zur Verwendung von Serilog verweisen.
< ItemGroup >
< PackageReference Include = " Serilog.Extensions.Logging " Version = " 2.0.2 " />
< PackageReference Include = " Serilog.Sinks.Console " Version = " 3.1.2-dev-00771 " />
</ ItemGroup > In einer ASP.NET -Umgebung müssen Sie nur die LoggerFactory -Instanz, die Sie vom Injektionsbehälter aus der Abhänge erhalten, an Netebics übergeben.
public MyController ( ILoggerFactory loggerFactory )
{
EbicsLogging . MethodLoggingEnabled = true ;
EbicsLogging . LoggerFactory = loggerFactory ;
}Weitere Informationen finden Sie in der Dateilizenz.txt.