くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

HTTPS

AWS EC2でドメイン取得してHTTPSのサーバ作る流れ

何となく、とりあえずやりたい場合の全体的な手順ってあまり見ないので、

とりあえずやるって場合で肝のところ。


構成

だいたいこんな感じ。

sample01

流れ

  • ドメイン取得とDNS(Route 53)
  • インスタンス(EC2)
  • LB作る(証明書も)
  • DNS側にLBのAレコードを作る
  • セキュリティーグループとかの設定

ドメイン取得とDNS(Route 53)

Route53のサービスからドメイン登録選んで色々入力。

個人の管理者なら画像くらいの情報で。ここはちゃんとした情報を入力しないとダメ。

ドメイン名は結構取られてる事が多いと思うので頑張ってひねり出す。

個人的な利用なら.netでいいかなと思いました。

sample00

sample00-1

sample00-2

昔は個別にDNSやらなきゃいけなかったみたいですが、今はここで登録すれば

DNS側も勝手に登録してくれる。↓のところで確認。

sample05

インスタンス直にEIPとか関連付けてそっちにドメインつけたい場合は、ここのDNSに該当インスタンスへのAレコードを登録してあげる。(今回はLB側に付けるのでここまででOK)

インスタンス(EC2)

いったんインスタンス作る。インスタンスは適当に。Webサーバなら何でもいい。

LB作る(証明書も)

sample06

sample07

sample08

※ HTTPSを選んでおかないと、次のステップでその辺の設定が出てこない。

sample09

ACMを選択して、ACMで新しく証明書作るのリンクから証明書作りに行く。

sample10

sample11

sample12

検証中の状態になったら、上記の詳細を開いて、ここからRoute53へCNAMEレコードを追加する。手でやってもいいかもだけど、何か上手くいかなかったのでここからやった方が無難。

登録されたかどうかは、Route53で該当のホストゾーンの中のレコードを見る。CNAMEが追加されてるはず。↓

sample13

証明書の検証自体は、数分~10数分くらいで終わるはず。終わったら下記の発行済み状態になる。

sample14

↑まで終わったら、元のLBの登録の画面に戻って、「証明書の名前」のところに今のモノを入れる。

あとは適当にLBの設定をして作る。

DNS側にLBのAレコードを作る

LB作り終わったら、DNSにLBの情報を入れてあげる。

sample20

sample21

sample22

↑。対象のLBを選択。

セキュリティーグループとかの設定

あと、セキュリティというかACLの設定。

Webサーバ側にLBのセキュリティグループを追加してあげないとダメ。

エクセルのマクロでHTTPS

エクセルでWebAPI呼んだりSOAP通信する際にHTTP通信を下の感じでやる。

'Getはこっち
Function HTTPGet() As String
    Dim httpObj As Object
    Set httpObj = CreateObject("MSXML2.XMLHTTP")
    
    httpObj.Open "GET", "http://hoge.fuga.com/someapi", False
    httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
    httpObj.send
    HTTPGet = httpObj.responseText
End Function

'Postはこっち
Function HTTPPost() As String
    Dim httpObj As Object
    Set httpObj = CreateObject("MSXML2.XMLHTTP")
    
    httpObj.Open "POST", "http://hoge.fuga.com/someapi", False
    httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
    httpObj.send "何かのデータ"
    HTTPPost= httpObj.responseText
End Function

HTTPの場合はこれで問題ないんだけど、HTTPSでやる場合はちょっと変える。 てか、変えなくてもまともな証明書(ベリサインとかから買ってるやつ)使ってる場合は 多分大丈夫。

てきとーにその辺のツールで作ったやつとか、いわゆるオレオレ証明書使う場合は、 上述のやつだとエラーになる。ブラウザとかで繋いだ時もセキュリティーの警告とか出るけど、 VBAだとエラー扱いになるっぽい。この場合は↓の感じにする。

'Getはこっち
Function HTTPSGet() As String
    Dim httpObj As Object
    Set httpObj = CreateObject("MSXML2.ServerXMLHTTP") '使うのはServerXMLHTTP
    
    httpObj.Open "GET", "https://hoge.fuga.com/someapi", False
    httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
    '証明書関係のエラーを無視する?オプション
    httpObj.setOption 2, httpObj.getOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
    httpObj.send
    HTTPSGet= httpObj.responseText
End Function
'Postはこっち
Function HTTPSPost() As String
    Dim httpObj As Object
    Set httpObj = CreateObject("MSXML2.ServerXMLHTTP") '使うのはServerXMLHTTP
    
    httpObj.Open "POST", "https://hoge.fuga.com/someapi", False
    httpObj.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
    '証明書関係のエラーを無視する?オプション
    httpObj.setOption 2, httpObj.getOption(2) - SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS
    httpObj.send "何かのデータ"
    HTTPSPost = httpObj.responseText
'    XMLで戻ってくるやつはこっちの方がいいかな
'    HTTPSPost= httpObj.responseXML
End Function

参考は例によってさすがのStackOverFlow

クライント側に使う証明書をインストールしておけば、最初の奴でも大丈夫かもかも。。。

問合せ