現在、私のアプリケーション (C) は、SSL 証明書を使用して Web サーバーに対して認証を行っています。現在、ほとんどの関数 (すべてではないにしても) を Tcl に移行しています。
それを行う方法に関するチュートリアルや例を見つけることができませんでした (Tcl ::http:: を使用することをお勧めしますが、TclCurl は問題ありません)。
助言がありますか?
ありがとう
現在、私のアプリケーション (C) は、SSL 証明書を使用して Web サーバーに対して認証を行っています。現在、ほとんどの関数 (すべてではないにしても) を Tcl に移行しています。
それを行う方法に関するチュートリアルや例を見つけることができませんでした (Tcl ::http:: を使用することをお勧めしますが、TclCurl は問題ありません)。
助言がありますか?
ありがとう
異なるサイトに異なるアイデンティティを提供したい場合を除いて、ヨハネスの答えは正しいです。その場合、 を使用します。これにより、そのコマンドが呼び出される前に、tls::init
デフォルトの TLS 関連オプションを に設定できます。tls::socket
package require http
package require tls
http::register https 443 ::tls::socket
# Where is our identity?
tls::init -keyfile "my_key.p12" -cafile "the_server_id.pem"
# Now, how to provide the password (don't know what the arguments are)
proc tls::password args {
return "the_pass"; # Return whatever the password is
}
# Do the secure connection
set token [http::geturl https://my.secure.site/]
# Disable the key
tls::init -keyfile {}
パスワードを提供する方法は奇妙であることに注意してください。非同期接続を行う場合、このメカニズムがうまくいかないことは確かです。(http と tls パッケージ間の統合を改善するための継続的な機能要求があります…)
tcl で https を使用するには、通常、tls
パッケージを使用します。http パッケージの man ページには、その方法の例が示されています。
package require http
package require tls
::http::register https 443 ::tls::socket
set token [::http::geturl https://my.secure.site/]
のtlsパッケージのドキュメントを読むと、tls::socket
クライアント証明書を渡すオプションがいくつかあることがわかります。それを組み合わせると、次のようになります。
::http::register https 443 [list ::tls::socket \
-cafile caPublic.pem -certfile client.pem]
-password
証明書ファイルがパスワードで保護されている場合は、コールバック パラメータを指定する必要がある場合があります。
このソリューションでは、アプリケーションからの各 https 要求 (ターゲットに関係なく) に対してクライアント証明書を使用することに注意してください。
編集tls::init
:Donalが示唆したように、で指定するよりも使用する方が良いかもしれません::http::register
。
例:
package require http
package require tls
::http::register https 443 ::tls::socket
proc ::get_cert_pass {} {
return "passw0rd"
}
# Add the options here
::tls::init -cafile caPublic.pem -certfile client.pem -password ::get_cert_pass
set tok [::http::geturl https://my.secure.site/]
リクエストを行うには、常に最後の 2 行を使用します。