クレジットカードに関する覚書
用語
- マーチャント
- 加盟店、お店
- カスタマー
- カード利用者(僕ら)、 card holder
国際ブランドとは
Visa, Mastercad とか決済システムを提供している企業のこと。 やっていることは
- 決済システムの提供
- 残高(balance)計算
勘違いしていたけど、(自社のカードを発行してない限り)与信管理はやってない。無論ポイント管理もやっておらず、顧客情報を持たない。
国際ブランドは現在7つ存在している。
- Visa
- MasterCard
- American Express
- JCB
- 銀聯(UnionPay)
- Discover Card
- Diners Club
発行会社(issuer)
国際ブランドからライセンスを得てカードを発行する会社のこと。 一般的にカード会社といえばこちら側を指す。
ポイントとかサービスに関する情報を持っているケースが多い。有名所では、クレディセゾン、UCカードなど。アメリカだと銀行が発行会社となる。
またマーチャントへの支払い責任を持つのは発行会社となる。
提携カード
発行会社が自社以外の企業や団体と提携して発行するカードのこと。提携元の特典が得られる。
早稲田カードとか。
※参考
カード番号
最初の6桁はBIN(Bank Identification Number, 銀行識別番号)またはIIN(Issuer Identification Number, 発行者識別番号)と呼ばれ、カードのイシュア(発行事業者)を特定する。
wikipediaによると、↑とのこと。
カード | プレフィックス | 番号長 |
---|---|---|
Visa | 4 | 16 |
MasterCard | 510000 - 559999, 222100 - 272099 | 16 |
American Express | 34, 37 | 15 |
JCB | 3528 - 3589 | 16 |
銀聯 | 622126 - 622925, 624 - 626, 6282 - 62883 | 16 |
Diners Club International | 300 - 303574, 3095, 36, 38 - 39 | 14 |
Discover Card | 60110, 60112-60114, 601174 - 601179, 601186 - 601199, 644 - 649, 65 | 16 |
BINLists.COM。これを使う issuer がチェックできる。 ビューカードでルックアップすると、ユーシーカードが出てくるので、ビューカードはユーシーカードが大本の issuer になるっているようだ。
プリペイドカードとは?
僕ら世代にわかりやすいのはテレカ。前払式支払手段の一種。
最近よく聞くところで。
参考
DNSやらまとめ ③ - レジストリ/レジストラ🤔 -
トップレベルドメイン
- ドメイン名のヒエラルキーの最上位(google.comのcom)とか
- gTLD
- Generic top-level
- com, info, org などのカテゴライズされたトップレベルドメイン
- 面白いところでは .xxx はオンラインのアダルトコンテツ向けものも公式に定義されている
- .tokyo はGeneric top-levelに属するらしい
- com, info, org などのカテゴライズされたトップレベルドメイン
- Generic top-level
- ccTLD
- Country code top-level domain
- jp, us など国を表すトップレベルドメイン
- Country code top-level domain
- gTLD
ルートドメイン(ルートドメインサーバー)
- ドメインに割り当てられる名前空間の最上位 ' ' (empty string) で表現される
- ルートドメインサーバーのゾーンはトップレベルドメインのホスト名とIPをアドレスを管理している
- 記事投稿現在、730のgTLDと301のccTLDを管理しているとのこと。
ICANN
- トップレベルドメインを管理する、非営利団体
- IANA
- Internet Assigned Numbers Authority
- もともと、名前空間なのどのインターネットにおける資源の管理を行っていたが、現在はその役割をICANNに引き継いでいる
- ICANNの機能名としてその名前が現存している
レジストリ(a domain name registry)
- トップレベルドメイン名と登録者情報のデータベース
レジストラ(a domain name registrar)
- ユーザーの要求を受けてドメインをレジストリに登録する業者の総称
- 日本だとGMOのお名前.comが有名
- ここで一覧が見られる
- 勘違いしていたけどムームードメインは代行業者であってレジストラではな
- => SRS(※後述)へのアクセス権はない
SRS(Shared Registry System)
- レジストラがレジストリに変更を加えるられるシステム
- ICANNから認定を受けているレジストラのみがアクセス可能
関連事項
噂では知っていたのだけど、特定の国のトップレベルドメインを利用した場合、Google側がその国の記事と判断してしまうため、実際の国内でのSEOが弱くなってしまうらしい。
以下はnoteはmu(モーリシャスの国別トップレベルドメイン)にしているけど、comに変えようとしているという内容。
参考記事
DNSやらまとめ ② - CAAレコードについて覚書 -
まぁ、本題はこちらでLet's Encrypt の CAA 周りの設定ですっころんだので覚書。
CAAレコードとは
A Certification Authority Authorization (CAA) record is used to specify which certificate authorities (CAs) are allowed to issue certificates for a domain.
証明書が発行できる CA に制限をかけられるレコード.
If no CAA record is present, any CA is allowed to issue a certificate for the domain
- CAAレコードがない場合はすべてのCAが該当のドメインに対して証明書を発行できる。
- CAAレコードがある場合はレコードに存在するCAのみ証明書を発行できる.
- 本仕様の目的としては予期しない証明書の発行リスクを低減させるもの。
CAAレコードは継承でき、expamle.com に設定した場合同様に、subdomain.example.com にも適応される。
example.com. CAA 0 issue "letsencrypt.org" alpha.example.com. CAA 0 issue "comodoca.com" beta.example.com. CAA 0 issue "letsencrypt.org" beta.example.com. CAA 0 issue "comodoca.com"
上記でいうと、デフォルトで Let's Encrypt の証明書に設定されている。
ただし、 alpha.example.com は Comodo CA からの証明書発行しか受け付けない。
また、 foo.example.com はexpample.com の設定を継承するので Let's Encrypt の 証明書の発行を受け付ける。
※参考元
Let's EncyptにおけるCAA
こちらに色々書いてある
Since Let’s Encrypt checks CAA records before every certificate we issue, sometimes we get errors even for domains that haven’t set any CAA records.
Let's Encrypt ではすべての証明書を発行するまえに、CAAのチェックを行っているので、 CAA レコードを設定していなくてもエラーを返すことがある。
さて、すっころんだ内容
実際におこったやつ(example.comは伏せ字)
Failed authorization procedure. www.example.com (http-01): urn:acme:error:dns :: DNS problem: SERVFAIL looking u p CAA for example.com
のエラーで証明書が作れなかった。
SERVFAILが起こったときに見るもの
- 最も多く発生するのがこのエラーとのこと(実際に起きた)
可能性1
- DNSSEC validatonが失敗している
- DNSSEC についてはわかりやすかったので以下を参照
可能性2
- 権威サーバーがNOTIMP を返している
- DNS プロバイダーに問い合わせよう!
可能性3
- 権威DNSサーバーが止まっている
- nsの設定を見直そう
何したらなおったか?
www.example.com の権威サーバーにCAAレコードを設定したらなおった。
こっからは予想なんだけど、当時、example.com にnsを設定してなかったので Let's Encrypt の CAA レコードをルックアップする機構が再帰的に www.example.com -> example.comと検索してきた際に exapmle.com へ DNSアクセスできずに転んでいたのではと憶測している。
ちょい実験してみないと真実はわからない。
DNSやらまとめ ① - 基礎力編 -
今思い返せば10代からDNS周りで障害を起こしまくっているのに、真剣に勉強しようと思ったことがなかったので一旦ここいらいで整理をば。
ついでに今回はLet's Encrypt の CAA も絡んできててんやわんやだったのでそこも整理してみる。 今回は DNS まわりのみ。
DNS関連
連用語整理
用語が散っていたり、レイヤーによって呼び方が違うのでDNS関係の文献を読みこなすために理解しておく。
FQDN
Fully Qualified Domain Nameの略。
ぶっちゃけ、各種文献内ではドメインと読み替えても意図が通じる。
何がFullyかというと、サーバーの設定次第ではwwwなどは省略できるケースがあるので、それを省かずに書いたものをFQDNと呼ぶ。
また、ドメインの最後には必ずルートドメイン . がつくがこちらは各所で省略してある。ホントは、google.com. らしい。
ネームサーバー
ドメインとIPアドレスの名前解決を行うサーバー。= DNSサーバー
権威サーバー
ゾーン情報を保有しているDNSサーバー。
ゾーンファイル(※後述)に対応表を持っている。
ゾーン
DNSサーバーが管理を行うドメインの範囲のこと。
管理権限を持つドメインとそのサブドメインが含まれている。
その設定はSOAレコードに記述されている。
※参考
SOAレコード
ゾーンファイルの中身で、ゾーン管理の情報が記載されている。
google.comでいうとこれ。dig の結果.
google.com. 59 IN SOA ns1.google.com. dns-admin.google.com. 269064631 900 900 1800 60
細かくは参考先を読めばいいのだが、 SOAの後ろは、dnsサーバーのドメイン お問合せ先とのこと。
※参考先
便利コマンド整理
DNS周りで問題が起きたときに調査に利用するコマンド。
以下、両者とも疎通確認ができる。
dig
何ができる?
- domain information groper の略
- grope とは 「手探りする、(…を)手探りで捜す、(心の中で)探る、暗中模索する」 とのこと、ちなみに groper は「痴漢」の意味もあるらしい
- 魚のハタは grouper で綴に u が入る
- grope とは 「手探りする、(…を)手探りで捜す、(心の中で)探る、暗中模索する」 とのこと、ちなみに groper は「痴漢」の意味もあるらしい
- DNSサーバーに問い合わせてドメインからIPのアドレスを引いたりIPアドレスからドメインを引くことができる
- リモートにあるDNSサーバーのレコードが適切に設定されているかを確認できる
- => つまるところ、疎通確認やレコードが正しく設定されているか確認ができる
- リモートにあるDNSサーバーのレコードが適切に設定されているかを確認できる
例
例えば Googleを引いてみたらこうなる
$ dig google.com ; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41717 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 167 IN A 216.58.197.206 ;; Query time: 1 msec ;; SERVER: 169.254.169.254#53(169.254.169.254) ;; WHEN: Sun Sep 15 19:45:07 JST 2019 ;; MSG SIZE rcvd: 55
- デフォルトではAレコードを探索してくれる。
- ANSWER SECTION を見れば調査したいレコードの確認ができる。
また、-t をつけると任意のレコードのタイプを指定することができる。
以下では CAA レコードを検索している。
$ dig google.com -t caa ; <<>> DiG 9.10.3-P4-Ubuntu <<>> google.com -t caa ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62610 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;google.com. IN CAA ;; ANSWER SECTION: google.com. 21599 IN CAA 0 issue "pki.goog" ;; Query time: 70 msec ;; SERVER: 169.254.169.254#53(169.254.169.254) ;; WHEN: Sun Sep 15 19:48:05 JST 2019 ;; MSG SIZE rcvd: 66
- ドメインが存在しなければ、 HEADER 部分に、NXDOMAINが表示され、何かしらのエラーがあれば SERVFAIL が出力される。
$ dig google-hogehoge.com ; <<>> DiG 9.10.3-P4-Ubuntu <<>> google-hogehoge.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 63258 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;google-hogehoge.com. IN A ;; AUTHORITY SECTION: com. 899 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1568544628 1800 900 604800 86400 ;; Query time: 3 msec ;; SERVER: 169.254.169.254#53(169.254.169.254) ;; WHEN: Sun Sep 15 19:50:51 JST 2019 ;; MSG SIZE rcvd: 121
nslookup
何ができる?
- FQDNを入力してIPアドレスを取得できる
- => こちらも DNSの疎通確認に使える
例
※2つ目のパラメータはGoogle Public DNS のアドレスをしてい。
nslookup google.com 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: google.com Address: 172.217.24.142
dig vs nslookup
大体できることは同じに思える、両者のシステム的な違いとしては、内部のリゾルバライブラリを利用しているかいなか。 dig はOSのリゾルバライブラリを利用しているが、nslookupは内包している。 MACでdigが動かないときは OS 側にリゾルバがいないからなので要注意。
- dns - dig vs nslookup - Unix & Linux Stack Exchange
- => この記事だとnslookupを使うのをやめ始めてるらしいが、まだ深追いしてない
一旦ここまで、随時追記。
未整理事項
- レジストリ
- レジストラ
その他参考
- インターネットを支えるDNS (1/3):DNSの仕組みと運用(2) - @IT
- 古い資料だけどわかりやすかった
ngx_http_proxy_connect_module を使って forward proxy で SSL 通信を利用可能にする
前提
SSL通信を nginx を利用してプロキシさせようとすると、暗号化された payload が見れないのでアクセス対象の URL にデータ通信を送る事ができない。
そのために HTTP tunnel という技術を利用することになる。
※ 参考
Nginx as forward proxy for HTTPS - Super User
proxyについて知識整理
- forward proxy
- インターネットにつながる手前にあるプロキシ
- トンネルとかゲートウェイとかよばれる
- 主な用途はIPアドレスを隠すこと
- 名前解決は、こいつとDNSサーバー間でやることがほとんど
- reverse proxy
- 内部ネットワークでアプリケーション・サーバーの手前にあるプロキシ
- 主な用途はロードバランシングや、アクセスコントロール
今回の主眼は forward proxyの方
まずトンネリングとは
ネットワーク技術におけるトンネリングとは、インターネット等のなんらかのネットワークで接続されている、物理的、または、論理的に離れた2点間を、仮想の回線(トンネル)によりあたかも同一点であるかのように扱えるようにすることである。
※ 参考
トンネリング - Wikipedia
HTTP tunnelとは?
具体的に何をやってくれるかというと
- クライアントがHTTPメソッド(※:後述)プロキシと目的のサーバーに対してTCPのコネクションをはるように要求する
- プロキシが目的のサーバーとクライアントの代わりにコネクションをはる
後続の通信は1,2ではられたコネクションの上で行われる(つまりTCPより上はTSLだろう上位のプロトコルであれば何でもいい)
CONNECTメッドとは?
- 上記、でいう1のときに投げられるHTTPメソッド
- このリクエストについているFQDNを利用してプロキシは名前解決及びTCPコネクションの作成を行う
- RFCで仕様化されている
※参考
- HTTP tunnel - Wikipedia
- 【図解】httpプロキシサーバの仕組み(http GET/https CONNECTメソッド)や必要性・役割・メリットデメリット・DNSの名前解決の順序 | SEの道標
ngx_http_proxy_connect_module
でnginxでこれをやろうと思うと、モジュールが必要になってくるので以下を利用する。
nginx.conf
ser www-data; worker_processes auto; daemon off; # Don't run Nginx as daemon, as we run it in Docker we need a foreground process. events {} http { server_names_hash_bucket_size 128; access_log /var/log/nginx_access.log; error_log /var/log/nginx_errors.log; server { listen 80; proxy_connect; proxy_max_temp_file_size 0; resolver 8.8.8.8; proxy_connect_allow 443 563; location / { proxy_pass http://$http_host; proxy_set_header Host $http_host; } } }
8.8.8.8はGoogleのパブリックDNS
構築
便利なDockerを使うぞ!
docker pull reiz/nginx_proxy:latest docker run -it -p 80:80 -v $(pwd)/nginx.conf:/usr/local/nginx/conf/nginx.conf reiz/nginx_proxy:latest
【おまけ】 ruby の open-uri でproxyに繋ぐ例
open("https://hogehoge.com", {:proxy => URI::parse("http://proxy_example.comm"),})
完
スプレッド構文の中で、三項演算子を使う
スプレッド構文は式じゃないので以下のようにする必要がある。
{ ...obj1, ...(shouldAppend ? obje2 : {}) }
可変の五角形を使って横幅可変の花屋の屋根っぽいCSSを構築するよ
要件
- 花屋の軒に垂れてるピラピラしたやつっぽいデザイン
- スマホ・PCで表示崩れを起こさないようにレスポンシブデザインで
- CSSだけで
成果物
iPhone X size
PC size
ソースコード
z-index周りとか適当だけど、製品にしたときはちゃんと書くぞ!
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>花屋</title> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.css"> <style> header { width: calc(100%-20px); border-bottom: 80px solid #ffbcff; border-left: 20px solid transparent; border-right: 20px solid transparent; height: 0; position: relative; z-index: 4; } nav { width: 100%; position: relative; z-index: 3; display: flex; } nav > a { position: relative; height: 65px; flex: 1; color: #FFF; text-align: center; font-weight: bold; display: block; } nav > a:after { content: ''; position: absolute; top: 65px; left: 0; background-color: inherit; padding-bottom: 50%; width: 57.7%; z-index: -1; transform-origin: 0 0; transform: rotate(-30deg) skewX(30deg); box-shadow: 0 0 4px rgba(0, 0, 0, 0.4); } nav a:nth-child(odd) { background-color: #FC5C65; } nav a:nth-child(even) { background-color: #ffc7ca; } div { width: 96%; height: 500px; margin: 0 auto; background-color: #feede3 } </style> </head> <body> <header> </header> <nav> <a href="#"> </a> <a href="#"> </a> <a href="#"> </a> <a href="#"> </a> <a href="#"> </a> </nav> <div> </div> </body> </html>