logo

Now Loading...

WEBサイト作りノウハウ WEBノウハウメモ

  • HOME
  • 記事一覧
  • Facebookのシェアデバッガーで「Curlエラー: 60 (SSL_CACERT)」が出た時の対処

Facebookのシェアデバッガーで「Curlエラー: 60 (SSL_CACERT)」が出た時の対処

cover image

カテゴリー:wordpress自作テーマ作成メモ

作成日付:2019年9月3日

更新日付:2020年5月7日

Can't validate SSL Certificate. Either it is self-signed (which will cause browser warnings) or it is invalid.というメッセージでFacebookシェアがうまくいかなかったときのメモ。主にSSL証明書テストと改善で解決する。

目的

Facebookにシェアした場合に出力される画像(OGP)の設定をするために、Facebookシェアデバッガーでテストをしたら以下エラーがでた。

複数試した結果として、結果的にできるようになったが、どれが効いたのかいまいちわからず、とりあえず記録として行ったことを記載する。
(たぶん最後に証明書のランクをあげたのが効いている感じがする)

FB SHARE DEBUGER CAPTURE

—————————————————–
caution-solid修正が必要な問題
SSL Error
Can’t validate SSL Certificate. Either it is self-signed (which will cause browser warnings) or it is invalid.
Curlエラー
Curlエラー: 60 (SSL_CACERT)
推測されるプロパティ
値が他のタグから推測される場合でも、og:imageプロパティは明示的に指定してください。
プロパティがありません
次のプロパティは必須です: og:url, og:type, og:title, og:image, og:description, fb:app_id
—————————————————–

環境

OS:CentOS release 6.10 (Final)

証明書:Let’s Encrypt

証明書の期限:以下


  [root@xxxxxx]# openssl x509 -in /etc/letsencrypt/live/mikd.tokyo/fullchain.pem -noout -dates
  notBefore=Aug 31 21:16:30 2019 GMT
  notAfter=Nov 29 21:16:30 2019 GMT

証明書の更新方法:cronを用いて毎月1日に更新を行う。/etc/cron.d配下に以下のファイルを置いている。


  [root@xxxxxx]# ls -l /etc/cron.d/letsencrypt
  -rw-r--r-- 1 root root 130  9月  7 00:25 2018 /etc/cron.d/letsencrypt

  [root@xxxxxx]# ls -l /etc/cron.d/letsencrypt
  00 04 01 * * root /etc/rc.d/init.d/httpd stop && /var/letsencrypt/letsencrypt/certbot-auto renew && /etc/rc.d/init.d/httpd start

結果

行ったこと

どれが効いたのか、AND条件なのかORなのかわからないが以下を行ったことで問題解決する。

  • ソフトウェアのアップデート
  • curの証明書の取得と設定
  • 中間証明書の設定
  • SSL証明書テストと改善

これらを行ったことで、結果的にFacebookシェアデバッガーからエラーが消えた。

方法

フロー

1ソフトウェアのアップデート
2curの証明書の取得と設定
3中間証明書の設定
4SSL証明書テストと改善


ソフトウェアのアップデート

まず、普通にサーバにインストールされたhttpdとopensslをアップデートしてみる。


[root@xxxxxxxx ~]# yum update httpd
# 出力は割愛
[root@xxxxxxxx ~]# yum update openssl
# 出力は割愛
[root@xxxxxxxx ~]# service httpd reload
httpd を再読み込み中:

この時点ではFacebookシェアデバッガー上のエラーは同じ。変化なし。

※実際に行ったときはopensslのみ、バージョンが古かったらしく、更新をおこなった。


curの証明書の取得と設定

CURのcertcertファイルを設定していないと、わかり設定してみる。

certは以下のURLから取得

http://curl.haxx.se/ca/cacert.pem


certを任意のパスに配置して、php.iniを編集する


#certを配置
[root@xxxxxxx]# ls -l /etc/cert/cacert.pem
-rw-r--r-- 1 root root 224085  8月 31 14:16 2019 /etc/cert/cacert.pem

#php.iniの編集
[root@xxxxxxx]# vi /etc/php.ini
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
;curl.cainfo =
; ↓ 以下に変更
curl.cainfo = /etc/cert/cacert.pem

#httpdの再起動
[root@xxxxxxx]# service httpd reload

この時点でもFacebookシェアデバッガー上のエラーは同じ。変化なし。


中間証明書の設定

中間証明書の設定をしていなかったので設定をする。



# 中間証明書の場所(xxxはドメイン名)
/etc/letsencrypt/live/xxx/chain.pem

[root@xxxxxxx]# vi /etc/httpd/conf.d/ssl.conf
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
# ↓以下に変更
SSLCertificateChainFile /etc/letsencrypt/live/xxx/chain.pem

この時点でもFacebookシェアデバッガー上のエラーは同じ。変化なし。


SSL証明書テストと改善

以下から証明書のテストができることを知る。

https://www.ssllabs.com/ssltest/

結果はC判定となる。

SSL証明書判定C

とりあえずBにしようと思い、以下2つを対応してみる。

This server is vulnerable to the POODLE attack. If possible, disable SSL 3 to mitigate. Grade capped to C.

This server accepts RC4 cipher, but only with older protocols. Grade capped to B.


[root@xxxxxxx]# vi /etc/httpd/conf.d/ssl.conf
# SSLv3を無効化
 List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
#SSLProtocol all -SSLv2
SSLProtocol all -SSLv2 -SSLv3

# 暗号リストにRC4を追加
#SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES:!RC4

Bになった。

とりあえずこの時点でFacebookの問題は解決。

SSL証明書判定B

参考

その他詳細

PHP設定確認方法

任意のファイルに以下を記載する。例はルートに配置した場合。


https://ドメイン名/phpinfo.php
<?php
  phpinfo();
?>

サイト上のOGP設定

サイト上でOGP設定はこのような記載にしている。


  <meta property="og:title" content="xxxxxxxx" />
  <meta property="og:type" content="article" />
  <meta property="og:url" content="https://xxx/xxxxxxxx" />
  <meta property="fb:app_id" content="xxxxxxxx" />
  <meta property="og:image" content="xxxxxxxx" />
  <meta property="og:description" content="xxxxxxxx" />