feat(crypto-service): gRPC-каркас сервиса криптографии (КриптоПро JCP)
- services/crypto-service/proto/crypto.proto — protobuf-контракт VerifyXMLDSig/SignXMLDSig/Health, package ru.zetit.bridgeandjoins.crypto.v1
- services/crypto-service/build.gradle.kts — Gradle Java 21 + protobuf-плагин + shadowJar
- services/crypto-service/src/main/java/.../CryptoServer.java — точка входа на UDS (Netty Epoll)
- services/crypto-service/src/main/java/.../CryptoServiceImpl.java — gRPC-биндинг
- services/crypto-service/src/main/java/.../{Verify,Sign,Health}Handler.java — заглушки операций
- services/crypto-service/src/main/java/.../KeystoreProvider.java — абстракция cryptopro/validata/vipnet/stub
- services/crypto-service/Dockerfile — Liberica JDK 21 → shadowJar → slim
- internal/cryptocli/client.go — Go-клиент по UDS, реализует m2mcore.CryptoVerifier (M1 stub)
- internal/cryptocli/client_test.go — тесты на доступность сокета и ErrNotImplemented
- deploy/docker-compose/docker-compose.yml — добавлен сервис crypto-service с UDS-volume
Реальная криптография КриптоПро JCP подключается после получения
лицензии и jar (положить в services/crypto-service/libs/jcp.jar) и
открытия Maven Central через прокси zetit (для grpc-java/santuario).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
// build.gradle.kts — Gradle build для crypto-service.
|
||||
//
|
||||
// Артефакт: ./build/libs/crypto-service-0.1.0-all.jar (shadow jar).
|
||||
// Запуск: java -jar crypto-service-0.1.0-all.jar (UDS из BJ_CRYPTO_SOCKET).
|
||||
//
|
||||
// Зависимости (Maven Central, подключаются автоматически):
|
||||
// - grpc-java (server + protoc-gen-java)
|
||||
// - protobuf-java
|
||||
// - apache santuario (XMLDSig)
|
||||
// - jcp (КриптоПро JCP) — внешний jar, поставляется заказчиком
|
||||
// отдельно вместе с лицензией; положить в libs/.
|
||||
//
|
||||
// Соберётся, когда Maven Central доступен через прокси zetit
|
||||
// (пока ждём админа).
|
||||
|
||||
plugins {
|
||||
id("java")
|
||||
id("application")
|
||||
id("com.google.protobuf") version "0.9.4"
|
||||
id("com.github.johnrengelman.shadow") version "8.1.1"
|
||||
}
|
||||
|
||||
group = "ru.zetit.bridgeandjoins"
|
||||
version = "0.1.0"
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion.set(JavaLanguageVersion.of(21))
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
flatDir { dirs("libs") } // для jcp.jar
|
||||
}
|
||||
|
||||
dependencies {
|
||||
val grpcVer = "1.62.2"
|
||||
val protobufVer = "3.25.3"
|
||||
|
||||
implementation("io.grpc:grpc-netty-shaded:$grpcVer")
|
||||
implementation("io.grpc:grpc-protobuf:$grpcVer")
|
||||
implementation("io.grpc:grpc-stub:$grpcVer")
|
||||
implementation("com.google.protobuf:protobuf-java:$protobufVer")
|
||||
|
||||
// XMLDSig (с ГОСТ-патчем поставляется в libs/ заказчиком).
|
||||
implementation("org.apache.santuario:xmlsec:3.0.4")
|
||||
|
||||
// КриптоПро JCP — кладётся в services/crypto-service/libs/jcp.jar.
|
||||
// implementation(files("libs/jcp.jar"))
|
||||
|
||||
compileOnly("javax.annotation:javax.annotation-api:1.3.2")
|
||||
implementation("ch.qos.logback:logback-classic:1.5.6")
|
||||
|
||||
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
|
||||
testImplementation("io.grpc:grpc-testing:$grpcVer")
|
||||
}
|
||||
|
||||
application {
|
||||
mainClass.set("ru.zetit.bridgeandjoins.crypto.CryptoServer")
|
||||
}
|
||||
|
||||
protobuf {
|
||||
protoc {
|
||||
artifact = "com.google.protobuf:protoc:3.25.3"
|
||||
}
|
||||
plugins {
|
||||
id("grpc") {
|
||||
artifact = "io.grpc:protoc-gen-grpc-java:1.62.2"
|
||||
}
|
||||
}
|
||||
generateProtoTasks {
|
||||
all().forEach { task ->
|
||||
task.plugins {
|
||||
id("grpc")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.test {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
Reference in New Issue
Block a user