11
43
Fork
You've already forked base
6

OpenPGP-Schlüssel o. S/MIME Zertifikat für LT-Systemmails #92

Open
opened 2022年01月11日 19:44:25 +01:00 by w4ts0n · 11 comments

Die Idee kam mir, um auch das Bewusstsein für verschlüsselte Kommunikation über E-Mail zu schärfen.

Konkret wäre der Gedanke, dass der/die Benutzer:in in ihrem Profil seinen / ihren öffentlichen OpenPGP-Schlüssel hinterlegen kann (Fußnote: Hinterlegung bei Profilanlegung möglich durch Bedienoberfläche). Damit würden dann alle E-Mails vom System, wie bspw. Kennwortzurücksetzung OpenPGP-verschlüsselt versandt.

Die Idee kam mir, um auch das Bewusstsein für verschlüsselte Kommunikation über E-Mail zu schärfen. Konkret wäre der Gedanke, dass der/die Benutzer:in in ihrem Profil seinen / ihren öffentlichen OpenPGP-Schlüssel hinterlegen kann (Fußnote: Hinterlegung bei Profilanlegung möglich durch Bedienoberfläche). Damit würden dann alle E-Mails vom System, wie bspw. Kennwortzurücksetzung OpenPGP-verschlüsselt versandt.
w4ts0n changed title from (削除) OpenPGP-Schlüssel für LT-Systemmails (削除ここまで) to OpenPGP-Schlüssel o. S/MIME Zertifikat für LT-Systemmails 2022年05月07日 22:53:40 +02:00
Author
Owner
Copy link

Hätte @Ryuno-Ki eine Idee, wie so etwas realisiert werden könnte?

Hätte @Ryuno-Ki eine Idee, wie so etwas realisiert werden könnte?

sind sie dann auch lesbar, wenn der Empfänger kein PGP hat? Sonst wäre es ein Zwang zu PGP...

sind sie dann auch lesbar, wenn der Empfänger kein PGP hat? Sonst wäre es ein Zwang zu PGP...
Author
Owner
Copy link

sind sie dann auch lesbar, wenn der Empfänger kein PGP hat? Sonst wäre es ein Zwang zu PGP...

Einen Zwang würde ich nicht implementieren wollen. Wenn nichts hinterlegt wurde, würden Systemmails weiterhin unverschlüsselt verschickt. Wenn jedoch S/MIME Zertifikat oder öffentlicher OpenPGP-Schlüssel hinterlegt wurde, würde darauf zurückgegriffen, @gerhardbeck

> sind sie dann auch lesbar, wenn der Empfänger kein PGP hat? Sonst wäre es ein Zwang zu PGP... Einen Zwang würde ich nicht implementieren wollen. Wenn nichts hinterlegt wurde, würden Systemmails weiterhin unverschlüsselt verschickt. Wenn jedoch S/MIME Zertifikat oder öffentlicher OpenPGP-Schlüssel hinterlegt wurde, würde darauf zurückgegriffen, @gerhardbeck

Na dann spricht nichts dagegen, hat nur m.E. keinerlei Priorität.

Na dann spricht nichts dagegen, hat nur m.E. keinerlei Priorität.

Persönlich würde ich das Signieren / Verschlüsseln beim Mailprovider sehen.
Da hier in der Konfiguration ja auch ein externer Anbieter eingetragen werden kann, würde ich es nicht in die Lerntools-Codebase bearbeiten.

Persönlich würde ich das Signieren / Verschlüsseln beim Mailprovider sehen. Da hier in der Konfiguration ja auch ein externer Anbieter eingetragen werden kann, würde ich es nicht in die Lerntools-Codebase bearbeiten.
Member
Copy link

Persönlich würde ich das Signieren / Verschlüsseln beim Mailprovider sehen.
Da hier in der Konfiguration ja auch ein externer Anbieter eingetragen werden kann, würde ich es nicht in die Lerntools-Codebase bearbeiten.

Wieso der Mailprovider?

  1. Das ist meiner Meinung nach nicht im Sinne des Erfinders von S/MIME bzw. OpenPGP. Bei OpenPGP geht es um eine E2E-Verschlüsselung. Wenn die der Mailprovider macht, ist die E2E-Verschlüsselung nicht mehr gegeben.

  2. Woher soll der Mailprovider denn die OpenPGP-Schlüssel haben, mit der er verschlüsseln soll? Kann er nicht.

S/MIME würde ich höchstens für Signaturen vorsehen. Die wenigsten Nutzer haben ein S/MIME-Zertifikat mit denen sie verschlüsselt Mails empfangen können. PGP ist dort häufiger anzutreffen aus der Praxis.

Aktuell nutzen wir nodemailer zum Versenden der E-Mails. Für genau diesen gibt es von diesem auch eine Erweiterung für PGP: https://github.com/nodemailer/nodemailer-openpgp

Was man also machen müsste für das Verschlüsseln: Einstellungsdialog erweitern zum Hinterlegen eines Public-Keys PGP. Dieses würde an den Server übermittelt und in der User-Datenbank mit abgespeichert werden.

Beim Versenden einer E-Mail an einen Nutzer wird geprüft, ob es einen Public-Key gibt. Wenn ja: verschlüsselt versenden.

Das Verschlüsseln ist also ein sehr übersichtlicher Aufwand.

PGP-Signing kann das o.g. auch. Da müsste man halt in der server.config.*.js ein private-Key + passphrase hinterlegen und an der richtigen Stelle den Signing-Key mitgeben.

Auch das ist ein überschauberer Aufwand.

> Persönlich würde ich das Signieren / Verschlüsseln beim Mailprovider sehen. > Da hier in der Konfiguration ja auch ein externer Anbieter eingetragen werden kann, würde ich es nicht in die Lerntools-Codebase bearbeiten. Wieso der Mailprovider? 1. Das ist meiner Meinung nach nicht im Sinne des Erfinders von S/MIME bzw. OpenPGP. Bei OpenPGP geht es um eine E2E-Verschlüsselung. Wenn die der Mailprovider macht, ist die E2E-Verschlüsselung nicht mehr gegeben. 2. Woher soll der Mailprovider denn die OpenPGP-Schlüssel haben, mit der er verschlüsseln soll? Kann er nicht. S/MIME würde ich höchstens für Signaturen vorsehen. Die wenigsten Nutzer haben ein S/MIME-Zertifikat mit denen sie verschlüsselt Mails empfangen können. PGP ist dort häufiger anzutreffen aus der Praxis. Aktuell nutzen wir nodemailer zum Versenden der E-Mails. Für genau diesen gibt es von diesem auch eine Erweiterung für PGP: https://github.com/nodemailer/nodemailer-openpgp Was man also machen müsste für das Verschlüsseln: Einstellungsdialog erweitern zum Hinterlegen eines Public-Keys PGP. Dieses würde an den Server übermittelt und in der User-Datenbank mit abgespeichert werden. Beim Versenden einer E-Mail an einen Nutzer wird geprüft, ob es einen Public-Key gibt. Wenn ja: verschlüsselt versenden. Das Verschlüsseln ist also ein sehr übersichtlicher Aufwand. PGP-Signing kann das o.g. auch. Da müsste man halt in der server.config.\*.js ein private-Key + passphrase hinterlegen und an der richtigen Stelle den Signing-Key mitgeben. Auch das ist ein überschauberer Aufwand.
Author
Owner
Copy link

Persönlich würde ich das Signieren / Verschlüsseln beim Mailprovider sehen.
Da hier in der Konfiguration ja auch ein externer Anbieter eingetragen werden kann, würde ich es nicht in die Lerntools-Codebase bearbeiten.

Wieso der Mailprovider?

  1. Das ist meiner Meinung nach nicht im Sinne des Erfinders von S/MIME bzw. OpenPGP. Bei OpenPGP geht es um eine E2E-Verschlüsselung. Wenn die der Mailprovider macht, ist die E2E-Verschlüsselung nicht mehr gegeben.

  2. Woher soll der Mailprovider denn die OpenPGP-Schlüssel haben, mit der er verschlüsseln soll? Kann er nicht.

S/MIME würde ich höchstens für Signaturen vorsehen. Die wenigsten Nutzer haben ein S/MIME-Zertifikat mit denen sie verschlüsselt Mails empfangen können. PGP ist dort häufiger anzutreffen aus der Praxis.

Aktuell nutzen wir nodemailer zum Versenden der E-Mails. Für genau diesen gibt es von diesem auch eine Erweiterung für PGP: https://github.com/nodemailer/nodemailer-openpgp

Was man also machen müsste für das Verschlüsseln: Einstellungsdialog erweitern zum Hinterlegen eines Public-Keys PGP. Dieses würde an den Server übermittelt und in der User-Datenbank mit abgespeichert werden.

Beim Versenden einer E-Mail an einen Nutzer wird geprüft, ob es einen Public-Key gibt. Wenn ja: verschlüsselt versenden.

Das Verschlüsseln ist also ein sehr übersichtlicher Aufwand.

PGP-Signing kann das o.g. auch. Da müsste man halt in der server.config.*.js ein private-Key + passphrase hinterlegen und an der richtigen Stelle den Signing-Key mitgeben.

Auch das ist ein überschauberer Aufwand.

Das klingt spannend. Welche Schritte konkret wären denn notwendig um sowas zu implementieren?

> > Persönlich würde ich das Signieren / Verschlüsseln beim Mailprovider sehen. > > Da hier in der Konfiguration ja auch ein externer Anbieter eingetragen werden kann, würde ich es nicht in die Lerntools-Codebase bearbeiten. > > Wieso der Mailprovider? > > 1. Das ist meiner Meinung nach nicht im Sinne des Erfinders von S/MIME bzw. OpenPGP. Bei OpenPGP geht es um eine E2E-Verschlüsselung. Wenn die der Mailprovider macht, ist die E2E-Verschlüsselung nicht mehr gegeben. > > 2. Woher soll der Mailprovider denn die OpenPGP-Schlüssel haben, mit der er verschlüsseln soll? Kann er nicht. > > S/MIME würde ich höchstens für Signaturen vorsehen. Die wenigsten Nutzer haben ein S/MIME-Zertifikat mit denen sie verschlüsselt Mails empfangen können. PGP ist dort häufiger anzutreffen aus der Praxis. > > Aktuell nutzen wir nodemailer zum Versenden der E-Mails. Für genau diesen gibt es von diesem auch eine Erweiterung für PGP: https://github.com/nodemailer/nodemailer-openpgp > > Was man also machen müsste für das Verschlüsseln: Einstellungsdialog erweitern zum Hinterlegen eines Public-Keys PGP. Dieses würde an den Server übermittelt und in der User-Datenbank mit abgespeichert werden. > > Beim Versenden einer E-Mail an einen Nutzer wird geprüft, ob es einen Public-Key gibt. Wenn ja: verschlüsselt versenden. > > Das Verschlüsseln ist also ein sehr übersichtlicher Aufwand. > > PGP-Signing kann das o.g. auch. Da müsste man halt in der server.config.\*.js ein private-Key + passphrase hinterlegen und an der richtigen Stelle den Signing-Key mitgeben. > > Auch das ist ein überschauberer Aufwand. > > Das klingt spannend. Welche Schritte konkret wären denn notwendig um sowas zu implementieren?
Member
Copy link

Das klingt spannend. Welche Schritte konkret wären denn notwendig um sowas zu implementieren?

Oberfläche:
image

Server (grob - ungetestet, die sendInfoMail macht mir auch noch ein paar Fragezeichen mit ihren Prüfungen....):

var openpgpEncrypt = require('nodemailer-openpgp').openpgpEncrypt;
exports.sendInfoMail=function(to, subject, html) {
	if (!to) return;
	if (!subject) subject="no subject";
	if (!html) html="";
	var from=config.INFO_MAIL;
	//valid email address?
	if (to.match(consts.REGEX_EMAIL)) {
		return sendMail(from, to, subject, html, $config.signKey);
	}
	//regsitered user?
	User.findOne({ login: to }, function (err, user) {
		if (err) debug(err);
		if (user) {
			sendMail(from, user.email, subject, html, $config.signKey, user.encryptionKey);
		}
		else debug('Couldn\'t send email to: '+to)
	})
}
function sendMail(from, to, subject, html, signKey=undefined, encryptKey=undefined) {
	var transporter=nodemailer.createTransport(config.SMTP_CONF);
	var mailOptions={
		from: from,
		to: to,
		subject: subject,
		html: html
	};
 if (signKey || encryptKey) {
 transporter.use('stream', openpgpEncrypt());
 }
 if (signKey) {
 mailOptions['signKey'] = signKey;
 mailOptions['shouldSign'] = true;
 }
 if (encryptKey) {
 mailOptions['encryptionKeys'] = [encryptKey];
 }
	transporter.sendMail(mailOptions, (error, info)=> {
		if (error) debug(error);
		else debug('Sent email to: '+to);
	});
}
> Das klingt spannend. Welche Schritte konkret wären denn notwendig um sowas zu implementieren? Oberfläche: ![image](/attachments/ac9dbab6-d2b3-49a1-8628-92210dbcb638) Server (grob - ungetestet, die `sendInfoMail` macht mir auch noch ein paar Fragezeichen mit ihren Prüfungen....): ``` var openpgpEncrypt = require('nodemailer-openpgp').openpgpEncrypt; exports.sendInfoMail=function(to, subject, html) { if (!to) return; if (!subject) subject="no subject"; if (!html) html=""; var from=config.INFO_MAIL; //valid email address? if (to.match(consts.REGEX_EMAIL)) { return sendMail(from, to, subject, html, $config.signKey); } //regsitered user? User.findOne({ login: to }, function (err, user) { if (err) debug(err); if (user) { sendMail(from, user.email, subject, html, $config.signKey, user.encryptionKey); } else debug('Couldn\'t send email to: '+to) }) } function sendMail(from, to, subject, html, signKey=undefined, encryptKey=undefined) { var transporter=nodemailer.createTransport(config.SMTP_CONF); var mailOptions={ from: from, to: to, subject: subject, html: html }; if (signKey || encryptKey) { transporter.use('stream', openpgpEncrypt()); } if (signKey) { mailOptions['signKey'] = signKey; mailOptions['shouldSign'] = true; } if (encryptKey) { mailOptions['encryptionKeys'] = [encryptKey]; } transporter.sendMail(mailOptions, (error, info)=> { if (error) debug(error); else debug('Sent email to: '+to); }); } ```
162 KiB
Author
Owner
Copy link

Es müsste dann auch eine Prüfung, ob ein OpenPGP-Schlüssel hinterlegt ist implementiert werden und dann falls vorhanden für eine Systemmail verwendet werden, richtig?

Es müsste dann auch eine Prüfung, ob ein OpenPGP-Schlüssel hinterlegt ist implementiert werden und dann falls vorhanden für eine Systemmail verwendet werden, richtig?
Member
Copy link

Es müsste dann auch eine Prüfung, ob ein OpenPGP-Schlüssel hinterlegt ist implementiert werden und dann falls vorhanden für eine Systemmail verwendet werden, richtig?

Ja korrekt. Und beim Speichern des Schlüssels muss noch geprüft werden, ob der GPG-Key überhaupt gültig ist (das hatte ich bisweilen noch nicht im Ablauf beschrieben).

> Es müsste dann auch eine Prüfung, ob ein OpenPGP-Schlüssel hinterlegt ist implementiert werden und dann falls vorhanden für eine Systemmail verwendet werden, richtig? Ja korrekt. Und beim Speichern des Schlüssels muss noch geprüft werden, ob der GPG-Key überhaupt gültig ist (das hatte ich bisweilen noch nicht im Ablauf beschrieben).
Author
Owner
Copy link

@monofox

Es müsste dann auch eine Prüfung, ob ein OpenPGP-Schlüssel hinterlegt ist implementiert werden und dann falls vorhanden für eine Systemmail verwendet werden, richtig?

Ja korrekt. Und beim Speichern des Schlüssels muss noch geprüft werden, ob der GPG-Key überhaupt gültig ist (das hatte ich bisweilen noch nicht im Ablauf beschrieben).

Das macht natürlich auch Sinn.

Wenn gültig ebens wenn ungültig einen visuellen Hinweis an den User, fände i h durchaus sinnvoll.

@monofox >> Es müsste dann auch eine Prüfung, ob ein OpenPGP-Schlüssel hinterlegt ist implementiert werden und dann falls vorhanden für eine Systemmail verwendet werden, richtig? > >Ja korrekt. Und beim Speichern des Schlüssels muss noch geprüft werden, ob der GPG-Key überhaupt gültig ist (das hatte ich bisweilen noch nicht im Ablauf beschrieben). Das macht natürlich auch Sinn. Wenn gültig ebens wenn ungültig einen visuellen Hinweis an den User, fände i h durchaus sinnvoll.
Sign in to join this conversation.
No Branch/Tag specified
main
dev
vue3
feature/ticket_117
weblate
master
experimental
v.0.9.1
v.0.9
v.0.8.2
v.0.8.1
v.0.8.0
v.0.7.0
0.7
v0.6.0
v0.30
v0.2.0
v0.12
v0.11
v0.1
Labels
Clear labels
Kind/Breaking
Breaking change that won't be backward compatible
Kind/Bug
Something is not working
Kind/Documentation
Documentation changes
Kind/Enhancement
Improve existing functionality
Kind/Feature
New functionality
Kind/Security
This is security issue
Kind/Testing
Issue or pull request related to testing
Priority
Critical
The priority is critical
Priority
High
The priority is high
Priority
Low
The priority is low
Priority
Medium
The priority is medium
Reviewed
Confirmed
Issue has been confirmed
Reviewed
Duplicate
This issue or pull request already exists
Reviewed
Invalid
Invalid issue
Reviewed
Won't Fix
This issue won't be fixed
Status
Abandoned
Somebody has started to work on this but abandoned work
Status
Blocked
Something is blocking this issue or pull request
Status
Need More Info
Feedback is required to reproduce issue or to continue work
Kind: Enhancement
improvement of a feature
Kind: Feature
Something totally new
Kind: Interesting for Wiki
to be saved in the wiki
Kind: invalid
Something is wrong
Kind: Question
More information is needed
Kind: Security
Relevant for security
Kind:bug
Something is not working
Priority: High
Priority: Low
Priority: Medium
Status: Contribution welcome
Contributions are very welcome, get started here
Status: Duplicate
This issue or pull request already exists
Status: External problem
There is an external problem
Status: Help wanted
Need some help
Status: In progress
Someone's working on it
Status: In review
we're testing a possible solution
Status: next release
All tested and ready for the next release
Status: Starters
This is a good task to start helping lerntools
Status: Tests neededd
Need some tests for locating the problem
Status: won't fix
This won't be fixed
vue3
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lerntools/base#92
Reference in a new issue
lerntools/base
No description provided.
Delete branch "%!s()"

Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?