質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • nginx

    1051questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

NginxのSSL化について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,301

tomato513

score 4

初めて質問させていただきます。
不慣れなためもしかしたら失礼あるかもしれませんがご容赦ください。

 前提・実現したいこと

さくらVPSサーバーにてSSLを導入し、Webサイトの構築を行いたいのですが、
手順に従い、SSLを設定したところ、エラーが表示され接続できません。
サーバー証明書と中間証明書の不備が濃厚ですが、
vim でssl.crtを作成し、それぞれ貼り付けして保存したため、誤字脱字は考えられません。
一応さくらVPSのヘルプにもメールを送っていますが、もしかしたら設定に不備があるかもしれないと思い
こちらに投稿させていただきました。

 発生している問題・エラーメッセージ

このサイトは安全に接続できません
sample-web.com から無効な応答が送信されました。
ERR_SSL_PROTOCOL_ERROR

 該当のソースコード

#nginx.conf
user  nginx;
worker_processes  auto;
worker_rlimit_nofile 100000;


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


events {
    worker_connections 2048;
    multi_accept on;
    use epoll;
}


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;
    server_tokens off;
    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout 10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 100;

    gzip on;
    gzip_http_version 1.0;
    gzip_disable "msie6";
    gzip_proxied any;
    gzip_min_length 1024;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
    open_file_cache max=100000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;


    include /etc/nginx/conf.d/*.conf;
}
server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/ssl.crt; # crt file
    ssl_certificate_key /etc/pki/tls/certs/server.key; # secret key
    server_name sample-web.com;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;
    ssl_prefer_server_ciphers on;
    location / {
        root /usr/share/nginx/html;
        index index.html;
    }


}

 試したこと

Nginxの設定に不備があるかどうか

nginx -t
↓
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful


httpでは接続できるか

server {
  listen       80;
  server_name  sample-web.com;

    charset koi8-r;
    access_log  /var/log/nginx/host.access.log  main;



    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
↓
index.htmlが表示されました

firewallの設定の確認

firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh-51110 http https
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

 以下頂いた回答から行った事です。

opensslでの確認

CONNECTED(00000003)
139875657488272:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 289 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1535102954
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---


こちら(http://d.hatena.ne.jp/rougeref/20170519)を元に
hostsに172.16.0.1(WebサイトのIPアドレス) sample-web.comを追記
再度opensslを実行->同じエラーが発生しております。

秘密鍵、CSR、証明書に不備がないかどうか

CSRのModulusを確認
openssl req -in server.csr -modulus -noout
SSLサーバ証明書のModulusを確認
openssl x509 -in ssl.crt -modulus -noout
秘密鍵のModulusを確認
openssl rsa -in server.key -modulus -noout
整合性確認いたしました。

秘密鍵が破損していないことの確認
openssl rsa -in server.key -check -noout
問題なし

SSL証明書内容確認
openssl x509 -in ssl.crt -text -noout

Subject: CN=sample-web.com
CPS: https://www.digicert.com/CPS
証明書の設定に不備見られませんでした

 補足情報(FW/ツールのバージョンなど)

CentOS Linux release 7.5.1804 (Core)
nginx version: nginx/1.15.2
ssl ラピッドSSL digicert 8月18日新規発行

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

+1

ご覧いただきありがとうございます。
一応解決したため、手順などをこちらに記載させていただきます。
あまり参考になるかわかりませんが、もし同じ症状の方がいらっしゃいましたら試して見てください。

まず/etc/nginx/conf.d/***.confを再度編集して見ました。

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/ssl.crt;
        ssl_certificate_key /etc/pki/tls/certs/server.key;
    server_name sample-web.com;
         ssl_session_cache shared:SSL:1m; *追加
        ssl_session_timeout 5m; *追加
        ssl_ciphers HIGH:!aNULL:!MD5; *追加
        ssl_prefer_server_ciphers on; *追加
        ssl_protocols TLSv1.1 TLSv1.2; *追加
        ssl_stapling on; *追加
        resolver 000.000.000.000 valid=300s; *追加(サーバーのIPアドレスを入力してください。)

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


}

そしてnginx -s reload ではなく、nginx -s stop で一度nginxを停止させ、
再度 nginx で起動させると無事httpsでhtml.indexが表示されました。

なかなかふわふわした自己解決になってしまいましたが、無事にhttps化できたのでよかったです。
daisuke 7様、本当にありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

openssl s_clientコマンドで証明書を確認してみてはどうでしょう?

例: opensslコマンドで証明書情報を確認したい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/24 18:09

    御回答ありがとうございます。
    確認してみましたところ、
    CONNECTED(00000003)
    140242547742608:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
    ---
    no peer certificate available
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 7 bytes and written 289 bytes
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
    Protocol : TLSv1.2
    Cipher : 0000
    Session-ID:
    Session-ID-ctx:
    Master-Key:
    Key-Arg : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1535101564
    Timeout : 300 (sec)
    Verify return code: 0 (ok)
    ---
    Verify return code: 0となっていますが、
    前半の140242547742608:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794:
    が気になるところです。
    一度調べてみます

    キャンセル

  • 2018/08/24 18:33

    「Cipher : 0000」なので、接続できていないですね。

    ふと気づいたのですが、 ssl on; してないだけ、とか。

    キャンセル

  • 2018/08/24 18:39

    ありがとうございます。
    Cipher : 0000は接続できていないという意味なのですね。
    知りませんでした。無知で申し訳ないです。
    ssl on ; は非推奨?になったとリファレンスかどこかでみた覚えがあり、ポート部分に 443 ssl.としています。
    ssl on ; 記述してreloadしましたがnginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/default.conf:21とやはり、私の使用しているNginxのverでは非推奨みたいです。

    キャンセル

  • 2018/08/24 18:44

    SSL/TLS接続の場合、まずクライアントとサーバ間でお互いに使える暗号スイートを噛み合わせるネゴシエーションを行いますが、どの組み合わせもだめとなると Cipher : 0000 となります。

    成功した場合は、

    Protocol : TLSv1.2
    Cipher : ECDHE-RSA-AES256-GCM-SHA384

    みたいな感じで、選択した暗号スイートが表示されます。

    キャンセル

  • 2018/08/24 18:56

    ラピッドSSLと書いてあるのも気になりました。
    CAがシマンテック時代の証明書になっていませんか?
    DigiCert署名の証明書になっていないとChromeは受け付けてくれません。

    参考: https://www.sakura.ad.jp/information/announcements/2017/09/21/1742/

    キャンセル

  • 2018/08/24 19:07

    openssl x509 -in ssl.crt -text -nooutで確認したところ、
    digicert署名になっておりました。
    質問の情報に追記しておきます。ありがとうございます。
    ついでに、秘密鍵、CSR、証明書の3点をopenssl ... nooutで確認、ファイルの破損なども確認しましたが、
    秘密鍵、CSR、証明書に整合性が確認できました。(この時点で私側に不備があることが確定?しました笑)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • nginx

    1051questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。