2016年9月24日土曜日

Windowsでopensslを使う

Windowsでopensslコマンドを使った時に嵌ったので、今後のためにメモ。

本家のOpenSSLではソースコードのみを配布しているためちょっと使おうと思ったときには敷居が高い。 バイナリ版はいくつかあるようだが Win32 OpenSSLがx64版もありよさそうな感じである。 ここから "Win64 OpenSSL v1.1.0a" を落としてきてインストール。コマンドラインから実行すると以下のエラーが出た。

C:\> c:\OpenSSL-Win64\bin\openssl.exe req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out server.crt -keyout server.pem
Can't open C:\Program Files\Common Files\SSL/openssl.cnf for reading, No such file or directory
756:error:02001003:system library:fopen:No such process:crypto\bio\bss_file.c:74:fopen('C:\Program Files\Common Files\SSL/openssl.cnf','r')
756:error:2006D080:BIO routines:BIO_new_file:no such file:crypto\bio\bss_file.c:81:
Generating a 2048 bit RSA private key
..................+++
..........................................................+++
writing new private key to 'server.pem'
-----
unable to find 'distinguished_name' in config
problems making Certificate Request
756:error:0E06D06A:configuration file routines:NCONF_get_string:no conf or environment variable:crypto\conf\conf_lib.c:272:

openssl.cnf というファイルが見つからないというエラーが出ている。 しかも、インストール先とは全く関係ない C:\Program Files\Common Files\SSL というフォルダを探しに行っている。

調査したところOPENSSL_CONFという環境変数にopenssl.cnfファイルの場所を指定すればよいらしいとのこと。 このファイルはOpenSSLインストール先のbin\snfフォルダにある、試しに以下のように設定して実行してみた。

C:\>set OPENSSL_CONF=C:\OpenSSL-Win64\bin\cnf\openssl.cnf

C:\> c:\OpenSSL-Win64\bin\openssl.exe req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out server.crt -keyout server.pem

---
Generating a 2048 bit RSA private key
..........................................................+++
..........................................................+++
writing new private key to 'server.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Setagaya-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company K.K.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.my-company.com
Email Address []:
---

うまくいったようだ、

2016年9月2日金曜日

WindowsでUUIDを作る

プログラムを作っているとテストデータとしてUUIDを作りたいことがたまにある。 Windowsの場合、VisualStudioをインストールしていればguidgen.exeとツールが付属しているのでそれを使うことができるが、インストールしていない環境でもPowerShellを使って出力できる。PowerShellから以下のコマンドをたたく。
[System.GUID]::NewGuid().ToString()
コマンドプロンプト派の人は、PowerShellを起動するまでもなく以下で。
@powershell "[System.GUID]::NewGuid().ToString()"
ほかにはWSHを使ってもできると思うけどコマンドラインから直接できるかどうかは不明。

2016年9月1日木曜日

Bluemix CFアプリ よく使うコマンド

BluemixへのCFアプリ配備でよく使うコマンドのまとめ。

Bluemixへのログイン

IDとパスワードを入れ、スペースを選択する。そのあとスペースを選択。
cf login -a https://api.ng.bluemix.net

組織(org)-スペース(space)-アプリ(app)

のような関係になっているらしい。

スペース中のアプリ一覧

cf apps

アプリ配備

アプリの置いてあるフォルダで以下を実行。メモリは128MB割り当て。
cf push {アプリ名} -m 128M

アプリとめる

cf stop {アプリ名}

アプリの環境変数一覧

CFアプリには環境変数が設定できコードに埋め込みたくない引数などはそこに定義できる。以下で一覧を表示。
cf env {アプリ名}

環境変数を設定

以下はLINEボットを作った時の設定例。 チャネルIDなどはコードに埋め込みたくないので環境変数で設定しプログラムで読み込むようにした。
cf set-env {アプリ名} BOTAPI_CHANNEL_ID {LINEチャネルID}
cf set-env {アプリ名} BOTAPI_CHANNEL_SECRET {LINEチャネルシークレット}
cf set-env {アプリ名} BOTAPI_MID {LINE MID}

変更したら以下コマンドで反映。

cf restage {アプリ名}

動作確認

以下のURLで動作確認できる

https://{アプリ名}.mybluemix.net/

ログを見る

cf logs {アプリ名}

メモリ量変更

メモリは割り当てを64MBに変更。
cf scale {アプリ名} -m 64M

ダッシュボード

https://new-console.ng.bluemix.net/