opensslでは、一括ファイル暗号化は機能しません。

opensslでは、一括ファイル暗号化は機能しません。

公開/秘密鍵で暗号化してNASに保存するためにopensslを使用しようとしているログファイルはたくさんありますが、失敗します。

私のログファイルは次のパスにあります。

/var/SYSLOGS/hosts/archive

私の公開鍵と秘密鍵は次の場所にあります。/etc/log-enc/

[root@NAG01 log-enc]# ls -l
total 8
-rw-r--r-- 1 root root 891 Jul 11 15:58 syslog_privalye_key.pem
-rw-r--r-- 1 root root 272 Jul 11 15:59 syslog_public_key.pem

それでは、次のコマンドを実行しようとしています。同じコマンドを1つずつ実行しても問題ありません。

for file in `find /var/SYSLOGS/hosts/archive/`
do  
FILE_BASE=$(basename $file)
echo "$file=>/NFS/Nag01/syslogs/hosts/$FILE_BASE.enc"
openssl rsautl -encrypt -inkey  /etc/log-enc/syslog_public_key.pem -pubin -in $file -out /NFS/Nag01/syslogs/hosts/$FILE_BASE.enc
done

エラーログです

RSA operation error
140628568049480:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:151:
/var/SYSLOGS/hosts/archive/192.168.33.5.log-20160131.gz=>/NFS/Nag01/syslogs/hosts/192.168.33.5.log-20160131.gz.enc
RSA operation error
140123978278728:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:151:
/var/SYSLOGS/hosts/archive/app02.log-20160306.gz=>/NFS/Nag01/syslogs/hosts/app02.log-20160306.gz.enc
/var/SYSLOGS/hosts/archive/192.168.34.8.log-20160227.gz=>/NFS/Nag01/syslogs/hosts/192.168.34.8.log-20160227.gz.enc
RSA operation error
139777258493768:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large for key size:rsa_pk1.c:151:
/var/SYSLOGS/hosts/archive/192.168.31.3.log-20160511.gz=>/NFS/Nag01/syslogs/hosts/192.168.31.3.log-20160511.gz.enc

これが元のファイルです。

[root@NAG01 log-enc]# ls -l /var/SYSLOGS/hosts/archive/192.168.33.5.log-20160131.gz
-rw-------. 1 root root 3569 Jan 31 04:16 /var/SYSLOGS/hosts/archive/192.168.33.5.log-20160131.gz
[root@NAG01 log-enc]# ls -l /var/SYSLOGS/hosts/archive/192.168.34.8.log-20160227.gz
-rw-------. 1 root root 2142 Feb 27 03:11 /var/SYSLOGS/hosts/archive/192.168.34.8.log-20160227.gz

答え1

これは私にとって効果的です。

まず、キーを生成してください。

openssl req -x509 -nodes -newkey rsa:2048 -keyout private-key.pem -out public-key.pem

その後、同じループ

for file in `find /var/SYSLOGS/hosts/archive/`
do 
FILE_BASE=$(basename $file)
echo "$file=>/NFS/Nag01/syslogs/hosts/$FILE_BASE.enc"
openssl smime -encrypt -binary -aes-256-cbc -in  $file -out /NFS/Nag01/syslogs/hosts/$FILE_BASE.enc -outform DER public-key.pem

done

答え2

ファイルの暗号化には使用しないでくださいopenssl。このために設計されていません。 (openssl実際にはそうではありません。デザイン済み)あなたはただ暗闇の中でたどっているだけです。虎のケージ。

GnuPGファイル暗号化のために特別に設計されています。ディストリビューションからインストールしてください。gpg --gen-key新しいキーを生成するために使用されます。キーはに保存されます~/.gnupggpg --exportアカウントから公開鍵をエクスポートし、gpg --export-secret-keys鍵をエクスポートし、gpg --import別のアカウントにインポートするために使用されます。

ファイルを暗号化するにはを使用gpg -e /path/to/fileしますgpg /path/to/file.gpg


出力を解析しません。find、使用find … -exec …。変数とコマンドの置換には常に二重引用符を使用してください。現在、ファイルに特殊文字がない可能性がありますが、二重引用符を使用しても害はありません。

ディレクトリ暗号化を試みるなど、他の方法でスクリプトが破損し、偽のエラーが発生する可能性があります。スクリプトの外観で、サブディレクトリを見つけることを期待していないようです/var/SYSLOGS/hosts/archive/。この場合は必要ありませんfind

cd /var/SYSLOGS/hosts/archive/ &&
for x in *; do
  gpg -e -o "/NFS/Nag01/syslogs/hosts/$x.gpg" "$x"
done

サブディレクトリがある場合:

cd /var/SYSLOGS/hosts/archive/ &&
find . -type f -exec sh -c '
  mkdir -p "${0%/*}" &&
  gpg -e -o "/NFS/Nag01/syslogs/hosts/$0.gpg" "$0"
'

関連情報