私はWindows + .NETドメインから来たCURLの世界に新しいです。
http://www.evercam.io/docs/api/v1/authentication で基本認証のためにREST APIにアクセスしようとしています。
curl -X GET https://api.evercam.io/v1/... \
-u {username}
CURLのセットアップが正常に完了した後、Windowsコマンドプロンプトでこのコマンドを使用する方法がわかりません。次のようにCURLをテストしました。
C:\>curl --version
curl 7.33.0 (x86_64-pc-win32) libcurl/7.33.0 OpenSSL/0.9.8y zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps Gopher http https imap imaps pop3 pop3s rtsp scp s
ftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz
今、私はこれで終わっています
C:\>curl -u myuser:mypassword -X GET https://api.evercam.io/v1/
curl: (51) SSL: no alternative certificate subject name matches target Host name 'api.evercam.io'
このSSL問題51エラーを修正するにはどうすればよいですか?
通常、証明書がホスト名と一致しない場合に発生します。
解決策は、ホストに連絡して証明書を修正するように依頼することです。
それ以外の場合は、証明書のcURLの検証をオフにできます。-k
(または--insecure
)オプションを使用します。
オプションが言ったように、insecureであることに注意してください。このオプションは自己署名証明書を許可するため、本番環境では使用しないでください。
詳細はこちらをご覧ください: http://curl.haxx.se/docs/sslcerts.html
私はそれが(非常に)古い質問であり、コマンドラインに関するものであることを知っていますが、Googleで「SSL:ターゲットホスト名に一致する代替証明書サブジェクト名がない」を検索したとき、これが最初のヒットでした。
答えを見つけるのにかなり時間がかかったので、これが誰かの時間を大幅に節約することを願っています! PHPで、これをcUrl setoptsに追加します。
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
p.s:これは一時的な解決策です。これは証明書エラーであるため、証明書をもちろん修正することをお勧めします!
api.evercam.io
の証明書の共通名は*.herokuapp.com
の名前であり、証明書には代替のサブジェクト名はありません。これは、api.evercam.io
の証明書がホスト名と一致しないため、証明書の検証が失敗することを意味します。 www.evercam.io
の場合と同じ、たとえばブラウザで https://www.evercam.io を試してみると、証明書の名前がホスト名と一致しないというエラーメッセージが表示されます。
そのため、evercam.ioで修正する必要がある問題です。セキュリティ、中間者攻撃などを気にしない場合は、証明書の検証を無効にすることがあります(curl --insecure
)が、httpではなくhttpsを使用する理由を自問する必要があります。
誰かの時間を節約できるかもしれません。
GuzzleHttpを使用し、このエラーメッセージcURLエラー60に直面した場合:SSL:代替証明書サブジェクト名がターゲットホストに一致しないnameで、「安全でない」ソリューション(本番環境では推奨されません)で問題ない場合は、\GuzzleHttp\RequestOptions::VERIFY => false
をクライアント構成に追加する必要があります。
$this->client = new \GuzzleHttp\Client([
'base_uri' => 'someAccessPoint',
\GuzzleHttp\RequestOptions::HEADERS => [
'User-Agent' => 'some-special-agent',
],
'defaults' => [
\GuzzleHttp\RequestOptions::CONNECT_TIMEOUT => 5,
\GuzzleHttp\RequestOptions::ALLOW_REDIRECTS => true,
],
\GuzzleHttp\RequestOptions::VERIFY => false,
]);
CurlFactory::applyHandlerOptions()
メソッドでCURLOPT_SSL_VERIFYHOST
を0に、CURLOPT_SSL_VERIFYPEER
をfalseに設定します
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = false;
verify
要求のSSL証明書の検証動作について説明します。
- SSL証明書の検証を有効にし、オペレーティングシステムが提供するデフォルトのCAバンドルを使用するには、trueに設定します。
- 証明書の検証を無効にするにはfalseに設定します(これは安全ではありません!)。
- カスタム証明書を使用した検証を有効にするために、CAバンドルへのパスを提供する文字列に設定します。
エラーコードに示されているように、「代替ホスト名に一致する代替証明書サブジェクト名はありません」-SSL証明書に問題があります。
証明書にはSANが含まれている必要があり、SANのみが使用されます。一部のブラウザは、廃止された共通名を無視します。
RFC 2818には、「dNSName型のsubjectAltName拡張が存在する場合、それをIDとして使用する必要があります。それ以外の場合、証明書のSubjectフィールドの(最も具体的な)Common Nameフィールドを使用する必要があります。名前は既存の慣習であり、推奨されておらず、代わりにdNSNameを使用することを証明機関に推奨します。」
同じ問題がありました。私の場合、digitaloceanとnginxを使用していました。
まず、digitaloceanでドメインexample.appとサブドメインdev.exemple.appをセットアップしました。次に、godaddyから2つのSSL証明書を購入しました。最後に、nginxで2つのドメインを構成して、次のsnipetでこれらの2つのssl証明書を使用します
私のexample.appドメイン設定
server {
listen 7000 default_server;
listen [::]:7000 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
root /srv/nodejs/echantillonnage1;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name echantillonnage.app;
ssl_certificate /srv/nodejs/certificatSsl/widcardcertificate/echantillonnage.app.chained.crt;
ssl_certificate_key /srv/nodejs/certificatSsl/widcardcertificate/echantillonnage.app.key;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_pass http://127.0.0.1:8090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $Host;
proxy_cache_bypass $http_upgrade;
#try_files $uri $uri/ =404;
}
}
私のdev.example.app
server {
listen 7000 default_server;
listen [::]:7000 default_server;
listen 444 ssl default_server;
listen [::]:444 ssl default_server;
root /srv/nodejs/echantillonnage1;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name dev.echantillonnage.app;
ssl_certificate /srv/nodejs/certificatSsl/dev/dev.echantillonnage.app.chained.crt;
ssl_certificate_key /srv/nodejs/certificatSsl/dev/dev.echantillonnage.app.key;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_pass http://127.0.0.1:8091;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $Host;
proxy_cache_bypass $http_upgrade;
#try_files $uri $uri/ =404;
}
}
https://dev.echantillonnage.app を起動したとき、
Fix CURL (51) SSL error: no alternative certificate subject name matches
私の間違いは以下の2行でした
listen 444 ssl default_server;
listen [::]:444 ssl default_server;
これを次のように変更する必要がありました。
listen 443 ssl;
listen [::]:443 ssl;