SSLは暗号化、認証、改竄検出の機能を提供します。
具体的なアルゴリズムはそれぞれ複数の選択肢が定義されており、SSL通信の開始時に行われるネゴシエーション時に、双方が許容するアルゴリズムの中からそれぞれ一つが選択されます。
選択肢によっては、攻撃への耐性の強度が大きく変化する場合もあります(極端な例だが、双方が同意すれば「暗号化なし」を選択することもできる)。
許容できない選択肢はあらかじめネゴシエーションの候補から外しておいたり、また望ましくないアルゴリズムが選択された場合はユーザーに警告したりといった対策が考えられます。
一般に公開されている製品は、実際にこれらの対策が取られています。
なお、選択できるアルゴリズムはSSLのバージョンによって異なります。
また、暗号化、認証、改竄検出の3つをひとまとめにして選択肢が定義されており、しかも全ての組み合わせが網羅されているわけではないので、同時に利用できない組み合わせも存在します。
共通鍵暗号に基づく暗号化を提供します。
以下のアルゴリズムが選択肢として定義されている。
共通鍵は、クライアントとサーバの双方から提供される乱数に基づいて決定されます。
双方で生成した乱数を組み合わせて使用するため、リプレイ攻撃では同一の共通鍵を得ることはできません。
鍵の盗聴を防ぐ仕組みとして、サーバ証明書がRSA暗号を用いて署名されている場合は、クライアントから送る鍵情報の一部をサーバの公開鍵で暗号化することができる。
サーバの秘密鍵を知らない部外者は、この情報を復号できない。
あるいは(RSA暗号を使っていない場合などは)Diffie−Hellman鍵共有アルゴリズムを使うこともできます。
SSLでは通常、サーバだけが証明書を提示し、クライアントがその正当性を確認する。
クライアント認証はオプションとなっており、必要な場合にはサーバがクライアントに対して証明書の提示を求めます。
なりすましを防ぐために、証明書には認証局 (CA:Certification Authority)による電子署名が必要となります。
またサーバ証明書には発行先サーバのホスト名が書き込まれており、クライアントは自分が接続しようとしているサーバのホスト名と一致するかどうか確認することができます。
この確認を行わない場合、攻撃者はサーバAの管理者でなくても、自分が管理するサーバBの正当な証明書を取得して、その証明書を使ってサーバAを名乗ることができてしまいます。