Server

CentOS7を「SSL化してないWEBサーバーをProxyServer経由でSSL化で接続させる」(メールサーバー構築含む)

とうとう、自分でサーバーを構築してSSL(暗号化)化させることになってしまいました。

実際は、SSL化できないWEBサーバーの接続に信頼性を持たせるために、ドメイン(URLの住所のようなもの)をhttpsにて接続させるために已む無くProxyServer(代理サーバー)を構築することにしたのです。

そのWEBサーバー自体をSSL化させればいい事じゃない!?

その通りなのですが、そのWEBサーバーに手を入れられないのです。ならばってことで、ProxyServer構築を考えて、ユーザーとの間に入ってもらってSSL化させたのです。

 

CentOS7はLinuxなので、Windowsとはちょっと扱いが違います。その辺の説明は今回はしません。
つまり、その辺も分かっている人でないと、まったく???のブログ内容だと思います。

というか、このブログサイトを検索する人は、私のようなやらなければならない人が必死で検索して見つけたって感じかと思います。それは良いとして、さっそく説明に進みます。

SSL証明書の申請

SSL証明書の申請

SSLがCentOS7にインストールされているのか確認

ターミナルモードから下記のコマンドを打ち込んで確認します。

openssl version

私の環境では、「OpenSSL 1.0.2k-fips 26 Jan 2017」と帰ってきました。
nginx(WEBサーバー)をインストールしたせいか、最初から入っていました。

秘密鍵ファイルを作成

ここでそのファイルを作成する場所を決めておかないとルートにファイルを作成されます。

私は、/etc/nginx/conf/sslまで、GNOMEのGUIからフォルダを手動で作成しました。
そのフォルダーまで移動してから下記のコマンドを入れて秘密鍵ファイルを作成しました。

openssl genrsa -des3 -out server.key 2048

上記は、パスフレーズ込みの秘密ファイルの作成方法です。

CSR(署名要求)の作成

openssl req -new -key server.key –out server.csr

署名情報を聞かれるので入力してきます。

Country Name (2 letter code) [XX]:JP #国名コードを入力(日本ならJP)
State or Province Name (full name) []:Tokyo #都道府県を入力(ローマ字で)
Locality Name (eg, city) [Default City]:Minato-ku #市区町村名
Organization Name (eg, company) [Default Company Ltd]:ma2n2n co,.ltd. #組織名・会社名
Organizational Unit Name (eg, section) []:Technical Division #(部門名 空欄でもOK)
Common Name (eg, your name or your server's hostname) []:hogehoge.jp #サイトのドメイン名 最重要
Email Address []: #何も打ち込まずにEnter
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #何も打ち込まずにEnter
An optional company name

同じフォルダの中にserver.csrというファイルが作成されるのでテキストファイルで開けると、

-----BEGIN CERTIFICATE REQUEST-----
MIICwDCCAagCAQAwezELMAkGA1UEBhMCSlAxEDAOBgNVBAgMB1RvY2hpZ2kxETAP
(略)
YMnMHN7JoeQl0INezYxEBFPPhYWI8AM+QRDBJH+cU7EiEuW0
-----END CERTIFICATE REQUEST-----

というファイルが出来上がっているのでコピーして、SSL認証取扱業者に申請します。

今回は、1年間で1000円程度の利用料のNetowlを使っています。


業者認証申請

SSL認証申請netowl

次の画面で恐れていたことが・・・受信メールアドレスが申請するドメインで決められた数個のアカウントに限定されている。CentOS7のまっさらな状態なので、メールサーバーの設定もしていない。結局しなければならないのだなーーーー。

admin@hogehoge.jp を作成するまでのサーバー設定部分の説明も加えます。

メールサーバー設定(postfix)

色んなサイトにメールサーバーの構築例がでていましたが、案外大変でした。

まず、postfixっていうのを使ってメールサーバーを立てるのですが、メールサーバーの意味を理解していなくて、メールクライアントに設定しても受信ができないのです。正確には接続さえもできてない状態でした。

数時間悩んで、結局はクライアントに接続する場合は、Dovecotっていうのをインストールしないとできない事がわかりました。

実際インストールしてやってみたら接続はできるようになりましたが、メールを受信できないのです。

 

今回の目的はSSL化なので、admin@hogehoge.jpで受信さえできればいいのです。

ということで、postfixとDovecotをアンインストールして最初からやる事にしました。

設定したのは、

●/etc/postfix/main.cf ※細かい変更箇所は検索すれば大量にでる。

●アカウントの追加

●メールボックスのフォルダの作成とパーミッション

 

ハマったのは、メールボックスのフォルダの作成とパーミッションでした。

HOME/ユーザー名/Maildir までは作られたが、その中のnew,curは手動で作成(tmpは自動で作成された。)し、手動でパーミッションを変更(実際はユーザーもrootから変更した。)

※自動で作成する設定コマンドがあるようです。

今回は、adminというアカウントなので、とりあえず、etc/aliasestというファイルにも目を通し、admin,administratorとうをコメントアウトしておいた。

 

ファイヤーウォールの設定をしないとメールの受信さえもできなかったので、ポート110だけを解放してみたがうまく行かなかったので、ファイヤーウォールOFFでメールを受けた。

#####Postfixの内容は以上にしておきます#####

SSL証明書の取得

情報を入力して申請

SSL認証申請netowl

メール内容を確認

メールをadmin@ドメイン名にてサーバー内でpostfix内のメール内容を確認

「取得申請を完了しました。
承認メールアドレス「admin@hogehoge.jp」にメールが届きますので承認作業をお願いします。」

上記のような表示がSSL業者サイトに表示されます。

 

SSL認証申請netowl

承認作業

サーバーに届いたメールを確認すると、ちゃんと内容を確認できるのですが、コピペすると文字化けして承認手続きができません。

仕方なく手打ちで承認サイトにアクセスして、validation code を手入力でいれました。

 

SSL認証申請netowl

 

SSL認証申請netowl

完了メール到着

前回のコンパネがあるサーバーSSL設定の場合は、admin@ドメイン名だったのですが、今回は、そのメールアドレスじゃなく、SSL業者の登録時に入力した連絡用メールアドレスにきました。

 

セキュアコアのSSL証明書をお申し込みいただき、ありがとうございます。
以下のコモンネームのSSL証明書が発行されましたのでお知らせいたします。


■コモンネーム
ドメイン.jp
www.ドメイン.jp

■SSL証明書

-----BEGIN CERTIFICATE-----
MIIGdTCCBV2gAwIBAgIQWGhQR9tnd+/PcWcCMGfA/jANBgkqhkiG9w0BAQsFADBh
(省略)
qSQuY1FWz3YJaXYai7FGRsv+bbsZ49gTnA==
-----END CERTIFICATE----- 
SSL証明書のインストール手順やその他ご不明な点は、
下記販売代理店が公開している情報をご参照ください。
 販売代理店 :SSLボックス(ネットオウル株式会社)
 サポートマニュアル:https://www.sslbox.jp/support/
 よくある質問 :https://www.sslbox.jp/support/faq.php
----------------------------------------------------
セキュアコア株式会社
https://www.securecore.co.jp

SSL証明書のサーバー設定

CERT(SSL証明書)と中間証明書をサーバーに転送

私の場合は、VNCserverでGUI接続していますので、ファイルを作成してコピペして2つのファイルを作成しました。

どうも、この2つのファイルを結合させるらしいですが、普通に結合させればいいのか!?

サーバーの方で、

 

#cat SSLサーバ証明書ファイル 中間証明書ファイル > 新しい結合ファイル

とやって結合させるようですがやってみたら、ただ単に結合させただけだったので手動で結合させても同じだと思います。

nginxの設定ファイルの変更(/etc/nginx/nginx.conf)

この他に、(/etc/nginx/conf.d/defoult.conf)がnginx.conf内でインクルードされているので、conf.d内のconfファイルはnginx.confファイルに含まれるようです。

とりあえず、私は、nginx.confの方だけをいじってみました。

 

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

	#server {
	#listen 80;
	#server_name hogehoge.jp;
	     #proxy_set_header X-Real-IP $remote_addr;
	     #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	     #proxy_set_header Host $http_host;
	     #proxy_redirect off;
	     #proxy_max_temp_file_size 0;

	     #location / {
		#proxy_pass http://hoge.com:80;
	     #}
	#}
	server {
		listen  443	ssl;
		#ssl	on;
		server_name     hogehoge.jp;
		ssl_certificate         /etc/nginx/conf/server.crt;
		ssl_certificate_key     /etc/nginx/conf/server.key;
		root                    /usr/share/nginx/html;
		access_log  /var/log/nginx/ssl-access.log  main;
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;

            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;        


    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
         }
	}
}

この内容で良いのですが、SSLの部分を追加すると再起動をするとエラーがでました。

そこからハマりました。

原因ははっきりしませんが、パスフレーズが問題だった!?かな?って感じです。

 

$ openssl rsa -in ssl.key -out  ssl.key
$ systemctl restart nginx

この上の作業をするとパスフレーズを外すようです。なんだか、最初からパスフレーズを入れない方法があるようですが、ここまでくると戻れませんでした。

systemctl status nginx.service

上記のコマンドで調べると、相変わらずエラーがでますが、https://ドメインで見てみるとちゃんと接続することができました。

 

firewallの設定

サーバ認証を取るのにadmin@ドメインでメールを受けなければならなかったのでfirewallを切っていました。GNOMEの遠隔で接続していましたのでGUIでポートを433を解放したらhttpsでも問題なく接続することができました。

もし、コマンドでやるなら下記でできます。

# firewall-cmd --add-port=443/tcp
success
# firewall-cmd --add-port=443/tcp --permanent
success
# firewall-cmd --list-ports
110/tcp 465/tcp 4000-4005/tcp 443/tcp 873/tcp

 

さて、本当の本題に突入します。


SSL化で接続させる

SSL化してないWEBサーバーをProxyServer経由でSSL化で接続させる

 

SSL化してない前の普通のProxyServer接続は簡単に終わっていました。

/etc/nginx/nginx.confの内容で、コメントアウトしていた部分になります。

そのコメントアウトを解除すると、hoge.comに自動転送になるわけです。

 

ではSSL化したProxyServerに接続した時に、SSL化してない転送先にするのは簡単でした。

 

	server {
		listen  443	ssl;
		#ssl	on;
		server_name     hogehoge.jp;
		ssl_certificate         /etc/nginx/conf/server.crt;
		ssl_certificate_key     /etc/nginx/conf/server.key;
		root                    /usr/share/nginx/html;
		access_log  /var/log/nginx/ssl-access.log  main;
            ssl_session_cache    shared:SSL:1m;
            ssl_session_timeout  5m;

            ssl_ciphers  HIGH:!aNULL:!MD5;
            ssl_prefer_server_ciphers  on;        


    location / {
        proxy_pass http://hoge.com:80;
         }
	}

 

つまり、locationの部分だけを転送先に変更すればいいという事です。

これで、目的のProxyServerが出来上がりました。

リダイレクトさせてhttpをhttpsで接続設定

でも、せっかくなのでhttpでアクセスしてきた時に、httpsに変えるリダイレクトという設定に変更しました。

 

server {
	listen 80;
	server_name yoyacle.jp;
	return 301 https://$host$request_uri;
	     #proxy_set_header X-Real-IP $remote_addr;
	     #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	     #proxy_set_header Host $http_host;
	     #proxy_redirect off;
	     #proxy_max_temp_file_size 0;

	     #location / {
		#proxy_pass http://160.16.231.215:80;
	     #}
	}

return 301 https://$host$request_uri;を追加して、他はコメントアウトして使わないようにすればOKです。削除しちゃってもいいのですが、いちおう残しておきました。

 

nginxの自動起動

再起動したら接続できなくなりました。
どうも、nginxが起動してないようです。
常時起動させます。

 systemctl enable nginx.service

firewallもGUIからやりましたが再起動すると外れたのでコマンドで設定しました。
再起動しても大丈夫になりました。

これで目的のサーバー構築ができたので終了になります。

ふー長かった!!

でも達成感ありますねーーー(笑)

 


-Server
-, , , , , , , , ,

Copyright© PCTips , 2019 All Rights Reserved.