中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

【CentOS】vsftpdでFTPSを構築しSSL暗号化通信の設定をする(証明書作成)

1.FTPSとは?

【FTPS】とは【File Tranfer Protocol over SSL/TLS】の略で
ファイル転送の約束事を【SSL/TLS】を利用してやりましょう、みたいなことです。
【SSL/TLS】は何かというと
【共通鍵暗号方式】と【公開鍵暗号方式】の両方を用いてデータを暗号化する技術になります。
今回はこれを設定し動作確認を行ってみます。

2.OpenSSLをインストール

SSL/TLSの暗号化通信には【SSLサーバー証明書】が必要になります。
これを作成するために【OpenSSL】が必要になるのでインストールします。

【OpenSSL:The Open Source toolkit for SSL/TLS】

インストールします。

[root@localhost ~]# yum -y install openssl

バージョンを確認します。

[root@localhost ~]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

3.【秘密鍵】と【サーバ証明書(CRT)】を作成する

opensslコマンドが使えるようになったので
早速【秘密鍵】と【サーバ証明書(CRT)】を作成します。
通常の流れだと

①秘密鍵の作成
②署名要求(CSR)の作成
③SSL証明書会社によるサーバー証明書(CRT)の作成

という手順になると思いますが
今回は自己署名になりますので
下記コマンドにて秘密鍵作成、CSR作成、自己署名を同時に行います。
更に【秘密鍵】と【サーバ証明書(CRT)】を【vsftpd.pem】という一つのファイルにまとめます。

[root@localhost ~]# cd /etc/pki/tls/certs
[root@localhost certs]# openssl req -x509 -nodes -newkey rsa:2048 -days 3650 -keyout vsftpd.pem -out vsftpd.pem
Generating a 2048 bit RSA private key
.+++
..............................................................................................+++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) :Tokyo
Locality Name (eg, city) [Default City]:Minato-ku
Organization Name (eg, company) [Default Company Ltd]:会社名など
Organizational Unit Name (eg, section) :部署名など
Common Name (eg, your name or your server's hostname) :www.hogehoge.co.jp
Email Address :


コマンドオプションの詳細は下記のとおりかと思います。
req:証明書の署名要求(CSR)の作成
-x509:X.509形式の署名要求ファイルを作成する
-nodes:鍵ファイルは暗号化しない
-newkey rsa:2048:RSA2048の秘密鍵を作成
-days 3650:X.509形式の証明書の有効期限を3650日とする
-keyout filename:出力する秘密鍵のファイル名
-out filename:出力する【サーバ証明書(CRT)】のファイル名

4.【vsftpd】の設定(FTP)

本設定については下記記事を参照して下さい。
パッシブモードでの【FTP】の設定になります。
www.chuken-engineer.com

5.【FTPS】の設定をする

4項で設定した内容に下記を追加し【FTPS】の設定を行います。
設定ファイルの場所は【/etc/vsftpd/vsftpd.conf】になります。

[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf

①SSL機能の有効

ssl_enable=YES

②SSLプロトコルの設定

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

③SSL接続を強制的に行う(SSL接続以外の接続は出来ない)

force_local_data_ssl=YES
force_local_logins_ssl=YES

④サーバー証明書の指定

rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem


設定が完了したら【vsftpd】を再起動します。

[root@localhost ~]# systemctl restart vsftpd

6.確認する

【FFFTP】で確認してみます。
【FTPS】で接続するために【設定変更】をクリックします。
f:id:tsu--kun:20190905140719p:plain


【暗号化】タブをクリックし下図の設定に変更し【OK】をクリックします。
f:id:tsu--kun:20190905140727p:plain


【接続】をクリックすると下図のとおり【証明書の確認】が表示されるので
【OK】をクリックします。
f:id:tsu--kun:20190905140738p:plain


下図のとおりタイトルバーに【暗号化されています】
の表示が出たらFTPSで接続されていることになります。
f:id:tsu--kun:20190905140747p:plain