diff --git a/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java b/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java
index e223ae4e59c7483418cc295d8c018902f4fa0fd1..06b5cdecec7914adba59c47b7b71714d490e470e 100644
--- a/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java
+++ b/bayernid-proxy-impl/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserver.java
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import com.google.protobuf.ByteString;
 
+import de.ozgcloud.common.binaryfile.TempFileUtils;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment;
 import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
@@ -46,8 +47,6 @@ import lombok.extern.log4j.Log4j2;
 @RequiredArgsConstructor
 public class UploadStreamObserver implements StreamObserver<GrpcSendBayernIdMessageRequest> {
 
-	static final String ATTACHMENT_FILE_SUFFIX = ".ozg-cloud.tmp";
-
 	private final StreamObserver<GrpcSendBayernIdMessageResponse> responseObserver;
 	private final BayernIdProxyService proxyService;
 	private final BayernIdMessageMapper messageMapper;
@@ -81,29 +80,24 @@ public class UploadStreamObserver implements StreamObserver<GrpcSendBayernIdMess
 	}
 
 	Attachment buildAttachment(GrpcAttachmentMetadata attachmentMetadata) {
-		var attachmentFile = createTemporallyFile(attachmentMetadata.getFileName());
+		InputStream temporallyFile;
+		try {
+			temporallyFile = createTemporallyFile();
+		} catch (IOException e) {
+			throw new TechnicalException("Can not create temporary file for attachment " + attachmentMetadata.getFileName(), e);
+		}
 		return Attachment.builder()
 				.name(attachmentMetadata.getFileName())
 				.type(attachmentMetadata.getFileType())
-				.content(attachmentFile)
+				.content(temporallyFile)
 				.build();
 	}
 
-	InputStream createTemporallyFile(String fileName) {
-		try {
-			closeTemporallyWriter();
-			var tempFilePath = createFile(fileName);
-			attachmentWriter = newOutputStream(tempFilePath);
-			return newInputStream(tempFilePath);
-		} catch (IOException e) {
-			throw new TechnicalException("Can not create temporary file for attachment " + fileName, e);
-		}
-	}
-
-	Path createFile(String fileName) throws IOException {
-		var tmpFile = Files.createTempFile(fileName, ATTACHMENT_FILE_SUFFIX);
-		tmpFile.toFile().deleteOnExit();
-		return tmpFile;
+	InputStream createTemporallyFile() throws IOException {
+		closeTemporallyWriter();
+		var tempFilePath = TempFileUtils.createTmpFile();
+		attachmentWriter = newOutputStream(tempFilePath);
+		return newInputStream(tempFilePath);
 	}
 
 	OutputStream newOutputStream(Path filePath) throws IOException {
diff --git a/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java b/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java
index d6efd88993fe8d530db3edaeefa7f26ca8c28f3f..d1887588852a13ed23a5bfe73af359b1ed1af085 100644
--- a/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java
+++ b/bayernid-proxy-impl/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/proxy/UploadStreamObserverTest.java
@@ -33,18 +33,19 @@ import java.io.OutputStream;
 import java.nio.file.Path;
 import java.util.concurrent.atomic.AtomicReference;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
+import org.mockito.MockedStatic;
 import org.mockito.Spy;
-import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.test.util.ReflectionTestUtils;
 
 import com.google.protobuf.ByteString;
 
+import de.ozgcloud.common.binaryfile.TempFileUtils;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment;
 import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
@@ -193,54 +194,82 @@ class UploadStreamObserverTest {
 			@Mock
 			private InputStream tmpFileInputStream;
 
-			@BeforeEach
-			void setup() {
-				doReturn(tmpFileInputStream).when(uploadStreamObserver).createTemporallyFile(any());
-			}
+			@Nested
+			class TestBuildSuccessfully {
+				@SneakyThrows
+				@BeforeEach
+				void setup() {
+					doReturn(tmpFileInputStream).when(uploadStreamObserver).createTemporallyFile();
+				}
 
-			@Test
-			void shouldCallCreateTemporallyFile() {
-				uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
+				@SneakyThrows
+				@Test
+				void shouldCallCreateTemporallyFile() {
+					uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
 
-				verify(uploadStreamObserver).createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-			}
+					verify(uploadStreamObserver).createTemporallyFile();
+				}
 
-			@Test
-			void shouldSetTemporallyFile() {
-				var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
+				@Test
+				void shouldSetTemporallyFile() {
+					var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
 
-				assertThat(result.getContent()).isEqualTo(tmpFileInputStream);
-			}
+					assertThat(result.getContent()).isEqualTo(tmpFileInputStream);
+				}
 
-			@Test
-			void shouldSetAttachmentName() {
-				var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
+				@Test
+				void shouldSetAttachmentName() {
+					var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
 
-				assertThat(result.getName()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_NAME);
+					assertThat(result.getName()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_NAME);
+				}
+
+				@Test
+				void shouldSetAttachmentType() {
+					var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
+
+					assertThat(result.getType()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_TYPE);
+				}
 			}
 
+			@SneakyThrows
 			@Test
-			void shouldSetAttachmentType() {
-				var result = uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
+			void shouldThrowTechnicalException() {
+				doThrow(IOException.class).when(uploadStreamObserver).createTemporallyFile();
 
-				assertThat(result.getType()).isEqualTo(GrpcAttachmentMetadataTestFactory.FILE_TYPE);
+				assertThrows(TechnicalException.class, () -> uploadStreamObserver.buildAttachment(grpcAttachmentMetadata));
 			}
 		}
 
 		@Nested
 		class TestCreateTemporallyFile {
 
+			private static final Path TEMP_FILE_PATH = Path.of("tempFile");
+
 			@Mock
 			private OutputStream attachmentWriter;
 			@Mock
 			private InputStream tmpFileInputStream;
 
-			private Path tempFilePath = Path.of("tempFile");
+			private MockedStatic<TempFileUtils> mockTempFileUtils;
 
+			@SneakyThrows
+			@BeforeEach
+			void init() {
+				mockTempFileUtils = mockStatic(TempFileUtils.class);
+				mockTempFileUtils.when(TempFileUtils::createTmpFile).thenReturn(TEMP_FILE_PATH);
+				doReturn(tmpFileInputStream).when(uploadStreamObserver).newInputStream(any());
+			}
+
+			@AfterEach
+			void close() {
+				mockTempFileUtils.close();
+			}
+
+			@SneakyThrows
 			@Test
 			void shouldCallCloseTemporallyFile() {
-
-				uploadStreamObserver.createTemporallyFile("test.txt");
+				uploadStreamObserver.createTemporallyFile();
 
 				verify(uploadStreamObserver).closeTemporallyWriter();
 			}
@@ -248,19 +277,19 @@ class UploadStreamObserverTest {
 			@SneakyThrows
 			@Test
 			void shouldCallCreateFile() {
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
+				mockTempFileUtils.when(TempFileUtils::createTmpFile).thenReturn(TEMP_FILE_PATH);
+
+				uploadStreamObserver.createTemporallyFile();
 
-				verify(uploadStreamObserver).createFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
+				mockTempFileUtils.verify(() -> TempFileUtils.createTmpFile());
 			}
 
 			@SneakyThrows
 			@Test
 			void shouldCallNewOutputStream() {
-				doReturn(tempFilePath).when(uploadStreamObserver).createFile(any());
+				uploadStreamObserver.createTemporallyFile();
 
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
-
-				verify(uploadStreamObserver).newOutputStream(tempFilePath);
+				verify(uploadStreamObserver).newOutputStream(TEMP_FILE_PATH);
 			}
 
 			@SneakyThrows
@@ -268,7 +297,7 @@ class UploadStreamObserverTest {
 			void shouldInitializeOutputWriter() {
 				doReturn(attachmentWriter).when(uploadStreamObserver).newOutputStream(any());
 
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
+				uploadStreamObserver.createTemporallyFile();
 
 				assertThat(getAttachmentWriter()).isEqualTo(attachmentWriter);
 			}
@@ -276,31 +305,19 @@ class UploadStreamObserverTest {
 			@SneakyThrows
 			@Test
 			void shouldCallNewInputStream() {
-				doReturn(tempFilePath).when(uploadStreamObserver).createFile(any());
-
-				uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
+				uploadStreamObserver.createTemporallyFile();
 
-				verify(uploadStreamObserver).newInputStream(tempFilePath);
+				verify(uploadStreamObserver).newInputStream(TEMP_FILE_PATH);
 			}
 
 			@SneakyThrows
 			@Test
 			void shouldReturnInputStream() {
-				doReturn(tmpFileInputStream).when(uploadStreamObserver).newInputStream(any());
-
-				var result = uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
+				var result = uploadStreamObserver.createTemporallyFile();
 
 				assertThat(result).isEqualTo(tmpFileInputStream);
 			}
 
-			@SneakyThrows
-			@Test
-			void shouldThrowException() {
-				doThrow(new IOException()).when(uploadStreamObserver).createFile(any());
-
-				assertThrows(TechnicalException.class, () -> uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME));
-			}
-
 			private OutputStream getAttachmentWriter() {
 				return (OutputStream) ReflectionTestUtils.getField(uploadStreamObserver, "attachmentWriter");
 			}