SSL証明書を文字列としてJSON経由でサーバーに送信する必要があります。サーバー上で、JSON文字列を有効な証明書に再構築する必要があります。私の問題は、証明書のスペースとラインブレーキです。
証明書の正しい形式を保持するにはどうすればよいですか?
SSL証明書を文字列としてJSON経由でサーバーに送信する必要があります。サーバー上で、JSON文字列を有効な証明書に再構築する必要があります。私の問題は、証明書のスペースとラインブレーキです。
証明書の正しい形式を保持するにはどうすればよいですか?
問題は確かにホワイトスペースとラインブレーキに関連していました。
これが私のために働いたものです:
証明書を1行のテキストフィールドにコピーしました。あまりエレガントではありませんが、1行の文字列をすばやく作成する方法です。ほとんどのテキストエディタもそれを行うことができます。
ラインブレーキ(現在は空白)を「\n」に置き換えました。-----BEGIN RSA PRIVATE KEY-----
そのままにしておくことができるフレーズ間の空白を置き換えないでください。
例:
{
"key": "-----BEGIN RSA PRIVATE KEY-----\njlQvt9WdR9Vpg3WQT5+C3HU17bUOwvhp/r0+viMcBUCRW85UqI2BJJKTi1IwQQ4c\ntyTrhYJYOP+A6JXt5BzDzZy/B7tjEMDBosPiwH2m4MaP+6wTbi1qR1pFDL3fXYDr\n"
}
もう1つの方法は、クライアントで証明書をbase64エンコードし、サーバーでデコードすることです。これにより、kubernetes secretsと同様に、改行を追加する手間を省きながら、フォーマットを維持できます。
もっと微妙な説明をしたいと思います。json-シリアル化された文字列は、改行やその他の文字をエスケープします。ただし、json文字列はPEMでエンコードされた証明書を問題なく保持できます。ここで発生する唯一の問題は、jsonを手動で構築するためにいくつかの作業を行う必要があることです。ただし、そのアプローチはお勧めしません。このユースケースは、一般的なツールで簡単にサポートできます。たとえば、以下は、証明書の取得、json内への埋め込み、jsonの解析、証明書の抽出、そして最終的にopensslによる解析を示しています。
openssl s_client -showcerts -connect google.com:443 </dev/null 2>/dev/null|openssl x509 -outform PEM | python3 -c "
import sys
import json
body = {}
body['cert'] = sys.stdin.read()
json.dump(body, sys.stdout)
" | python3 -c "
import sys
import json
body = json.load(sys.stdin)
print(body['cert'])
" | openssl x509 -text; echo $?
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
fa:bc:89:f7:bf:33:10:94:0a:00:00:00:01:25:fd:32
Signature Algorithm: sha256WithRSAEncryption
...
0